Calculated Columns
Detects calculated columns in semantic models that may impact refresh performance and model size.
What It Detects
This flag identifies all calculated columns in a semantic model — columns defined with a DAX expression that is evaluated and materialized during data refresh, as opposed to columns sourced directly from Power Query / the data source.
Why It Matters
- Increased refresh time — Calculated columns are computed row-by-row during refresh (after all source data is loaded), adding to the total processing time.
- Increased model size — The computed values are stored in the VertiPaq engine just like regular columns, consuming memory.
- Cannot be pushed to source — Unlike Power Query transformations, calculated column logic runs inside the Analysis Services engine and cannot benefit from query folding.
- Often replaceable — Many calculated columns can be replaced with DAX measures (computed at query time, not stored) or moved upstream to Power Query or the data warehouse.
Trigger Conditions
A column is flagged when:
- The column is defined with a DAX expression (i.e., it is a calculated column, not a source column or Power Query computed column).
Threshold: Any calculated column is flagged. This is an awareness flag — not every calculated column is a problem, but each one should be reviewed to confirm it cannot be replaced with a measure or pushed upstream.
Output
| Field | Description |
|---|---|
columnName | Name of the calculated column |
tableName | Parent table |
expression | The DAX expression (truncated to 200 chars) |
dataType | Resulting data type |
estimatedSizeBytes | Estimated in-memory size |
datasetName | Semantic model name |
workspaceName | Workspace name |
Notes and Edge Cases
- Legitimate uses — Calculated columns are appropriate when you need a physical column for: relationships, sort-by-column, or Row-Level Security filters. In these cases, the calculated column is expected and can be acknowledged.
- Measures vs. calculated columns — If the calculated column is only used in visuals (never in a relationship or sort-by), it can almost always be converted to a measure, which avoids storing the values and reduces model size.
- Power Query alternative — If the calculation can be expressed in M (Power Query), moving it there enables query folding and removes the DAX engine overhead during refresh.
Related Flags
- Complex DAX Columns — Calculated columns with especially complex DAX expressions.
- Unused Columns — Calculated columns that are defined but never used.