DAX Measures and Naming Conventions

February 3, 2026 · View on GitHub

Naming Conventions

General Rules

  • Use human-readable names (spaces allowed)
  • Be descriptive: Total Sales Amount not TSA
  • Avoid abbreviations unless universally understood
  • Use consistent capitalization (Title Case recommended)
  • Avoid special characters except spaces

Table Naming

TypeConventionExample
DimensionSingular nounCustomer, Product, Date
FactBusiness processSales, Orders, Inventory
BridgeCombined namesCustomerAccount, ProductCategory
Measure TableUnderscore prefix_Measures, _KPIs

Column Naming

TypeConventionExample
KeysSuffix with "Key" or "ID"CustomerKey, ProductID
DatesSuffix with "Date"OrderDate, ShipDate
AmountsDescriptive with unit hintSalesAmount, QuantitySold
FlagsPrefix with "Is" or "Has"IsActive, HasDiscount

Measure Naming

TypeConventionExample
AggregationsVerb + NounTotal Sales, Count of Orders
RatiosX per Y or X RateSales per Customer, Conversion Rate
Time IntelligencePeriod + MetricYTD Sales, PY Total Sales
ComparisonsMetric + vs + BaselineSales vs Budget, Growth vs PY

Explicit vs Implicit Measures

Always Create Explicit Measures For:

  1. Key business metrics users will query
  2. Complex calculations with filter manipulation
  3. Measures used in MDX (Excel PivotTables)
  4. Controlled aggregation (prevent sum of averages)

Implicit Measures (Column Aggregations)

  • Acceptable for simple exploration
  • Set correct SummarizeBy property:
    • Amounts: Sum
    • Keys/IDs: None (Do Not Summarize)
    • Rates/Prices: None or Average

Measure Patterns

Basic Aggregations

Total Sales = SUM(Sales[SalesAmount])
Order Count = COUNTROWS(Sales)
Average Order Value = DIVIDE([Total Sales], [Order Count])
Distinct Customers = DISTINCTCOUNT(Sales[CustomerKey])

Time Intelligence (Requires Date Table)

YTD Sales = TOTALYTD([Total Sales], 'Date'[Date])
MTD Sales = TOTALMTD([Total Sales], 'Date'[Date])
PY Sales = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date]))
YoY Growth = DIVIDE([Total Sales] - [PY Sales], [PY Sales])

Percentage Calculations

Sales % of Total = 
DIVIDE(
    [Total Sales],
    CALCULATE([Total Sales], REMOVEFILTERS(Product))
)

Margin % = DIVIDE([Gross Profit], [Total Sales])

Running Totals

Running Total = 
CALCULATE(
    [Total Sales],
    FILTER(
        ALL('Date'),
        'Date'[Date] <= MAX('Date'[Date])
    )
)

Column References

Best Practice: Always Qualify Column Names

// GOOD - Fully qualified
Sales Amount = SUM(Sales[SalesAmount])

// BAD - Unqualified (can cause ambiguity)
Sales Amount = SUM([SalesAmount])

Measure References: Never Qualify

// GOOD - Unqualified measure
YTD Sales = TOTALYTD([Total Sales], 'Date'[Date])

// BAD - Qualified measure (breaks if home table changes)
YTD Sales = TOTALYTD(Sales[Total Sales], 'Date'[Date])

Documentation

Measure Descriptions

Always add descriptions explaining:

  • What the measure calculates
  • Business context/usage
  • Any important assumptions
measure_operations(
  operation: "Update",
  definitions: [{
    name: "Total Sales",
    tableName: "Sales",
    description: "Sum of all completed sales transactions. Excludes returns and cancelled orders."
  }]
)

Format Strings

Data TypeFormat StringExample Output
Currency$#,##0.00$1,234.56
Percentage0.0%12.3%
Whole Number#,##01,234
Decimal#,##0.001,234.56

Display Folders

Organize measures into logical groups:

measure_operations(
  operation: "Update",
  definitions: [{
    name: "YTD Sales",
    tableName: "_Measures",
    displayFolder: "Time Intelligence\\Year"
  }]
)

Common folder structure:

_Measures
├── Sales
│   ├── Total Sales
│   └── Average Sale
├── Time Intelligence
│   ├── Year
│   │   ├── YTD Sales
│   │   └── PY Sales
│   └── Month
│       └── MTD Sales
└── Ratios
    ├── Margin %
    └── Conversion Rate

Variables for Performance

Use variables to:

  • Avoid recalculating the same expression
  • Improve readability
  • Enable debugging
Gross Margin % = 
VAR TotalSales = [Total Sales]
VAR TotalCost = [Total Cost]
VAR GrossProfit = TotalSales - TotalCost
RETURN
    DIVIDE(GrossProfit, TotalSales)

Validation Checklist

  • All key business metrics have explicit measures
  • Measures have clear, descriptive names
  • Measures have descriptions
  • Appropriate format strings applied
  • Display folders organize related measures
  • Column references are fully qualified
  • Measure references are not qualified
  • Variables used for complex calculations