Skip to content

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:

  1. The column is defined with a DAX expression (i.e., it is a calculated column, not a source column or Power Query computed column). Internally this is the isCalculated flag, derived from the presence of a column expression.

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

Each analyzed column is emitted as a ReportColumnDefinition. The fields relevant to this flag are:

FieldDescription
nameFully-qualified column reference in TableName[ColumnName] form (e.g. Sales[Margin])
tableNameParent table name
dataTypeResulting data type
estimatedRowCountEstimated row count (a fixed assumption of 10,000 rows is used)
estimatedSizeKBEstimated in-memory size in KB (derived from data type × an assumed 10,000 rows)
isCalculatedtrue for calculated columns (derived from the presence of a DAX expression)
isUnusedWhether the column is referenced anywhere in the report layout
isDuplicatedWhether the same short column name appears in more than one table
expressionThe full DAX expression (string or string[]); not truncated for this flag

Note: The analyzer works from a locally uploaded .pbix/.pbit file, so there is no workspace or service dataset context at the column level — the output contains no datasetName or workspaceName fields. The 200-character expressionPreview truncation applies only to the Complex DAX Columns flag, not to this one.


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.