afv-library/skills/tableau-next-semantic-model-generate/references/patterns.md
Antoine Laviron b26d254871 feat: add tableau-next-semantic-model-generate skill
Adds a skill for authoring Tableau Next semantic models (SDMs) on Data 360: build from scratch, add data objects, define joins, enrich with calculated fields and metrics, and make models AI-ready.

Smoke-tested against a live Data 360 org: SDM discovery, AI-readiness flip, dimension creation, metric creation, and description backfill all exercised end-to-end.
2026-07-26 13:33:29 +02:00

4.9 KiB
Raw Blame History

Real-World Patterns

Patterns learned from analyzing 25+ production dashboard packages. Use these as guidance when designing your own fields and metrics.

See also: kpi-formulas.md for time-based aggregation patterns (snapshot sums, annualization, DATEDIFF) and 40+ composite KPI formulas from finance/banking domains.

Metric Design Patterns

Additional Dimensions:

  • Sales metrics typically include 45 breakdown dimensions: Account_Name, Opportunity_Type, Account_Industry, Account_Type, Full_Name
  • Choose dimensions that enable meaningful "Top contributors" and "Top detractors" insights
  • Avoid using too many dimensions (5+ can dilute insights)

Time Dimension Selection:

  • Pipeline/forecast metrics → Use Created_Date (when opportunity entered pipeline)
  • Revenue/closed metrics → Use Close_Date (when deal closed)
  • Process metrics → Use event date (when action occurred)

Insights Settings (common pattern):

{
  "insightTypes": [
    {"enabled": false, "type": "TopContributors"},
    {"enabled": false, "type": "ComparisonToExpectedRangeAlert"},
    {"enabled": true, "type": "TrendChangeAlert"},
    {"enabled": true, "type": "BottomContributors"},
    {"enabled": true, "type": "ConcentratedContributionAlert"},
    {"enabled": true, "type": "TopDrivers"},
    {"enabled": true, "type": "TopDetractors"},
    {"enabled": true, "type": "CurrentTrend"}
  ]
}

TopContributors and ComparisonToExpectedRangeAlert are often disabled; trend-based insights are enabled.

Plural/Singular Nouns: Often left empty ("") in production packages, but can improve readability when specified (e.g., "calls", "opportunities").

Calculated Field Patterns

Ratios → UserAgg:

SUM([Table].[Won_Count]) / SUM([Table].[Total_Count])

Always use aggregationType: UserAgg when expression includes aggregation functions.

Conditional Aggregation → UserAgg:

SUM(IF [Table].[Stage] = 'Closed Won' THEN [Table].[Amount] ELSE 0 END)

Or referencing a calculated field (unqualified):

SUM(IF NOT [Is_Open_Opportunity_clc] THEN [OpportunityLineItem_TAB_Sales_Cloud].[Product_Quantity]*[OpportunityLineItem_TAB_Sales_Cloud].[List_Price_Amount] END)

Referencing Other Calc Fields:

SUM([Total_Sales_clc])/[Total_Closed_Opportunities_Amount_clc]

Valid to reference other calculated fields in expressions. Calculated fields are model-level and use unqualified syntax [FieldName_clc]. Table fields require qualified syntax [Table].[Field].

Weighted Calculations:

SUM(FLOAT([Probability_clc] * [Table].[Quantity]*[Table].[Price]))

Use FLOAT() for probability-weighted values.

LOD (Level of Detail) Expressions:

{ FIXED [Table].[Fiscal_Quarter] : SUM([Table].[Quota_USD]) }

FIXED expressions compute aggregations at specific dimension levels, independent of other dimensions in the view. Common uses:

  • Quota allocation across time periods
  • Percent of total calculations
  • Running totals or cumulative metrics
  • Comparing values across different granularities

LOD syntax: { FIXED [Table].[dimension] : aggregation_function([Table].[measure]) }

Dimension Patterns

Tiering by Thresholds:

IF [Table].[CSAT] >= 60 THEN "Tier 1"
ELSEIF [Table].[CSAT] <= 20 THEN "Tier 3 - Escalated"
ELSE "Tier 2"
END

Mapping with CASE:

CASE [Table].[Call_Reason]
  WHEN "Benefits Inquiry" THEN "General Platform Issues"
  WHEN "Billing Question" THEN "Regulatory Document Upload Issues"
  ELSE [Table].[Call_Reason]
END

Boolean Flags:

If [Table].[Type]="Self" then "Site User" else "Participant" end

Referencing Calculated Fields in Dimensions:

IF [Is_Open_Opportunity_clc] THEN 'Open' ELSEIF [Is_Won_Opportunity_clc] THEN 'Won' ELSE 'Lost' END

Calculated fields use unqualified syntax. Table fields require [TableName].[FieldName]:

[HLS_Call_Center_Dataverse].[Member_CSAT]

Industry-Specific Patterns

Sales:

  • Win_Rate_clc, Conversion_Rate_clc, Pipeline_Generation_clc
  • Weighted_Pipeline_Value_clc (probability * amount)
  • Sales_Cycle_Won_clc (time between Created_Date and Close_Date)
  • Quota_Per_Fiscal_Quarter_clc (FIXED LOD for quota allocation)

Service:

  • Average_Time_To_Close_clc (UserAgg)
  • CSAT_clc, Volume_clc (UserAgg)
  • Reopen_Rate_clc (ratio)

HR:

  • Headcount_clc, Turnover_Rate_clc
  • Employee tiering by age ranges or seniority

Healthcare:

  • Call volume, wait times
  • Tiering by CSAT or priority
  • Channel mapping (Portal, Call, Email, etc.)

See also

  • kpi-formulas.md — Time-based aggregation patterns (snapshot sums, annualization, DATEDIFF), composite KPI formulas, and color semantics. 40+ production dashboard templates across Finance, Banking, Sales, HR domains. Covers lifecycle tracking (new/lost counts via LOD) and period-constrained calculations.