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.
4.9 KiB
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 4–5 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.