# Tableau LOD Expressions in Databricks SQL, AI/BI Dashboards and Metric Views

> Map Tableau FIXED, INCLUDE and EXCLUDE LOD expressions to Databricks AI/BI custom calculations, dataset SQL and Unity Catalog metric views, with filter traps.

- Canonical: https://getantares.io/tableau-lod-expressions-to-databricks-sql/
- Published: 2026-09-07
- Updated: 2026-09-07

---

Databricks AI/BI dashboards have level of detail expressions of their own, and two of Tableau's three keywords land on them directly. `FIXED` becomes a scalar window function: `SUM(Sales) OVER (PARTITION BY Region)`. `EXCLUDE` becomes the coarser form: `SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region))`. `INCLUDE` has no named keyword in a dashboard calculation, so it gets modeled in the dataset query instead.

Where the calculation ends up decides more than the syntax: a custom calculation, a dataset-SQL window and a metric view can return the same number and meet a dashboard filter at different moments. Databricks added [level of detail expressions for custom calculations](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/custom-calculations/level-of-detail) on [January 19, 2026](https://docs.databricks.com/aws/en/ai-bi/release-notes/2026); limits and dates here are as of September 2026.

## Where a Tableau LOD lands in Databricks AI/BI

Databricks names two kinds: **fixed**, on scalar window functions, and **coarser**, on aggregate window functions. Tableau names three. Two terms in the third column: a calculated dimension is a row-level column added to a dataset, and a calculated measure re-aggregates with whatever the chart groups by.

| Tableau LOD | Databricks AI/BI form | Where it lives, and how filters reach it |
| --- | --- | --- |
| `{FIXED [Region] : SUM([Sales])}` | `SUM(Sales) OVER (PARTITION BY Region)` | Calculated dimension, computed before visualization groupings and filters |
| `{FIXED : SUM([Sales])}` | `SUM(Sales) OVER ()`, wrapped as `SUM(Sales) / ANY_VALUE(total)` | Two custom calculations, denominator fixed under any grouping |
| `{EXCLUDE [Region] : SUM([Sales])}` | `SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region))` | Calculated measure, respecting visualization filters except on the excluded dimension |
| Nested: `{FIXED [Region] : AVG({FIXED [Region],[Month] : SUM([Sales])})}` | Pin the inner grain in dataset SQL, then aggregate it in a measure | Dataset SQL plus a measure, inner grain fixed and outer following the visual |
| `{INCLUDE [Customer] : SUM([Sales])}`, re-aggregated as `AVG` | No dashboard keyword: group at customer grain in the dataset query | Dataset SQL, so verify filter behavior |

A nested LOD usually splits in two, on Databricks' own percent-of-total pattern: the pinned part as a dimension calculation, the outer part as a measure that references it. Percent of total itself, and anything mixing an LOD with a running total or a rank, lives on [table calculations](/tableau-table-calculations-to-databricks/). Plain formulas are on [calculated fields](/tableau-calculated-fields-to-databricks-sql/).

## How FIXED converts

Tableau's `FIXED` pins aggregation to the dimensions you name, and Databricks does the same with [SQL window functions](https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-window-functions): `PARTITION BY` carries the pinned dimensions, and empty parentheses after `OVER` give the grand total. A fixed expression is a dimension, so using it inside a measure means wrapping it in an aggregate such as `ANY_VALUE`. A FIXED over `COUNTD` needs `ARRAY_SIZE` with `COLLECT_SET`, because `DISTINCT` is not allowed in a scalar window function.

Filters are where a converted number drifts quietly. Tableau states that [FIXED expressions](https://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields_lod.htm) ignore every filter in the view other than context, data source and extract filters. Databricks states that fixed LOD expressions are computed before visualization groupings and filters are applied.

Making one respond to a dashboard filter means defining that filter as a [dashboard parameter](https://docs.databricks.com/aws/en/dashboards/manage/filters/parameters) , a named marker substituted into the dataset query text, `:region`. Inside a custom calculation it is referenced as `:keyword`, supported since [March 26, 2026](https://docs.databricks.com/aws/en/ai-bi/release-notes/2026). The context filter a FIXED expression respected maps to a parameter; the quick filter it ignored maps to a field filter. Read the worksheet's filters, not only the formula.

## How EXCLUDE converts

`EXCLUDE` drops a dimension the view already has and reports a coarser total on every row. The Databricks coarser form says the same from the other end: `PARTITION BY *` inherits the visualization's grouping, and `EXCEPT (...)` lists what to take back out. Multiple fields in one `EXCEPT` have been supported since [February 12, 2026](https://docs.databricks.com/aws/en/ai-bi/release-notes/2026). Databricks points the coarser form at calculations that should follow the visualization's own filters, where Tableau's EXCLUDE already sat; the exemption above applies to FIXED alone. The full filter-timing rule is on [table calculations](/tableau-table-calculations-to-databricks/).

## How INCLUDE converts

INCLUDE has no named keyword in a dashboard custom calculation. Neither documented type adds a dimension the visualization lacks: `OVER` pins a static partition, and `AGGREGATE OVER` only widens the visual's grouping through `EXCEPT`. Finer than the view is the one direction that syntax does not go. The exception arrived one layer down, in metric views, below.

In a dashboard the conversion is modeling, not translation. Group at the finer grain inside the [dashboard dataset query](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/datasets), one row per customer, and let the visualization aggregate that upward, which is what the outer `AVG` did anyway. Then test the filters against that subquery: a field filter on the dataset result and a parameter substituted before the grouping can disagree.

## Which limits decide where the calculation lives

| [Databricks rule](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/custom-calculations/), as of September 2026 | What it means for a converted LOD |
| --- | --- |
| Columns must belong to one dataset | An LOD that spanned a blend needs the join done first |
| Up to 200 custom calculations per dataset | A workbook with hundreds of calculated fields will not fit one dataset |
| Table visualizations take calculated dimensions, not calculated measures | A fixed LOD can sit in a table visual, the coarser EXCLUDE form cannot |

A Tableau function absent from Databricks' [custom calculation function reference](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/custom-calculations/function-reference) moves into the dataset query.

## When the metric view is the better home

Custom calculations are scoped to one dataset and dashboard. A [Unity Catalog metric view](https://docs.databricks.com/aws/en/uc-semantics/metric-views/) is defined once and queried from dashboards, notebooks and alerts. Databricks documents [level of detail expressions in metric views](https://docs.databricks.com/aws/en/uc-semantics/metric-views/level-of-detail) on a page last updated August 17, 2026: a fixed LOD goes in a field's `expr` as a window function, and the coarser form is a window measure declared with `range: all`. The third Tableau keyword landed there on September 10, 2026, when the metric view editor gained Include-style expressions in YAML ([release notes](https://docs.databricks.com/aws/en/ai-bi/release-notes/2026)), ahead of the page itself.

The scoping rule: an LOD used by more than one workbook is a company metric and belongs in a metric view. One that makes a single chart behave stays a custom calculation.

## What Antares does with LOD expressions

LOD expressions have to be found before they can be placed. That is what the free Analyzer does: deterministic, metadata only, changing nothing in the source environment, and listing which workbooks carry them. The Converter is deterministic-first, with guardrailed and validated AI steps, flagging what it cannot verify rather than guessing. Antares is a BI migration tool and stops at the dashboard layer: it does not move data into Delta tables or build the model underneath. [Try a sample conversion](https://try.getantares.io).

The function-level mapping is on [calculated fields to Databricks SQL](/tableau-calculated-fields-to-databricks-sql/), the running totals and ranks on [table calculations in Databricks AI/BI](/tableau-table-calculations-to-databricks/), and the order of the whole job on the [migration guide](/tableau-to-databricks-ai-bi-migration/). The Power BI answer is [Tableau LOD expressions to DAX](/tableau-lod-expressions-to-dax/). Sources: Databricks on [level of detail expressions](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/custom-calculations/level-of-detail) and [custom calculations](https://docs.databricks.com/aws/en/dashboards/manage/data-modeling/custom-calculations/), Tableau on [LOD expressions](https://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields_lod.htm).

## Related resources

- [Tableau to Databricks AI/BI Migration](/tableau-to-databricks-ai-bi-migration/)
- [Calculated Fields to Databricks SQL](/tableau-calculated-fields-to-databricks-sql/)
- [Table Calculations in Databricks AI/BI](/tableau-table-calculations-to-databricks/)
- [Tableau LOD Expressions to DAX](/tableau-lod-expressions-to-dax/)

## FAQ

### Does Databricks AI/BI support Tableau LOD expressions?

Databricks AI/BI has its own level of detail expressions, added for custom calculations on January 19, 2026. It names two types: fixed, written as an aggregate with OVER (PARTITION BY dims), and coarser, written as AGGREGATE OVER (PARTITION BY * EXCEPT (dim)). Tableau FIXED and EXCLUDE map onto those two.

### What is the Databricks equivalent of a Tableau FIXED LOD?

A scalar window function in a custom calculation. {FIXED [Region] : SUM([Sales])} becomes SUM(Sales) OVER (PARTITION BY Region). Drop PARTITION BY for a grand total. To use it inside a measure, wrap it in an aggregate such as ANY_VALUE, which is what the Databricks percent-of-total example does.

### How do you convert a Tableau INCLUDE LOD to Databricks?

A dashboard custom calculation has no named keyword for it: Databricks documents only fixed and coarser expressions, and neither adds a dimension the visualization lacks. Group at the finer grain inside the dataset query instead, then let the visualization re-aggregate the result. Unity Catalog metric views gained Include-style LOD expressions in YAML on September 10, 2026, ahead of their documentation.

### Should an LOD expression become a custom calculation or a metric view?

Custom calculations are scoped to one dataset and dashboard, up to 200 per dataset. A Unity Catalog metric view defines the measure once for dashboards, notebooks, alerts and Genie Agents, and documents the same fixed and coarser forms, with an Include-style form added to its editor on September 10, 2026. If the expression appears in several workbooks, put it in the metric view.
