MEASURE() function—so you can express derived logic on top of existing
semantic definitions with both flexibility and governance.
Calculated fields are expressed as Semantic SQL and pushed down to the Cube
backend for evaluation. The semantic layer compiles them with the rest of the
query—rather than applying them only in the browser—so the same validation,
governance, and warehouse execution path apply as for any other Semantic SQL
analysis.
Using AI to create calculated fields
You can ask the Cube AI agent to create custom calculations in natural language. The agent can add or refine calculated fields from different parts of the product—for example while exploring in Analytics chat or working in Workbooks—so you are not limited to a single entry point when you want a new metric or dimension for the analysis in front of you.Creating calculated fields in UI
You can also build and edit calculated fields directly in the workbook. New fields appear in the Query fields section of the field picker sidebar.Aggregations from existing dimensions
Right-click a dimension column header and choose an aggregation to create a calculated field automatically. Available aggregations depend on the column type:Calculations from existing measures
Open the menu on a measure column header and use the Calculations submenu for derived calculations:% of previous, % change from previous, and Running total require at
least one dimension in the query.
Filtered measures
When working with query Results, pivot so at least one dimension is on columns, then open the header menu on a pivoted measure column and choose Create filtered measure. Cube adds a calculated measure that applies the column’s slice—for example, from Count broken down by Status, you get a measure that only aggregates rows matching that status (such as completed orders only). The option appears only for native measures on pivoted columns, not for calculated fields. The same flow works in Explore when results are pivoted the same way.Bins and value groups
You can also bucket an existing dimension without writing SQL. Open its menu in the field picker sidebar and choose Create bins… on a number dimension, or Group values… on a string or boolean one (grouping a boolean dimension is how you rename itstrue/false values). Time dimensions have granularities
instead, and an already derived field cannot be bucketed again.
0, 18, 25 yields
< 0, [0, 18), [18, 25), >= 25, and no row is dropped. Label style
renders a bucket as [10, 20), >= 10 and < 20, 10 to 19 (offered only while
every boundary is a whole number), or Custom, which lets you type your own
label for each bucket. Turn off Label empty values separately to fold rows
where the dimension is NULL into the last bucket instead of reporting them
under their own label (Unknown by default).
Value groups collect the dimension’s values into named sets: pick values, name
the group, and choose Add group. A value belongs to one group at a time, and
an existing group’s picked values can be changed later via Edit group. By
default, whatever you did not pick—including empty values—falls under
Everything else, which defaults to Other; turn off Group remaining
values to have those rows return NULL instead.
Bucket labels carry their position as a prefix (1., 2., zero-padded past nine
buckets) so that sorting the column sorts it by value rather than alphabetically,
which would put >= 25 before [0, 18). The prefix is visible in results, chart
legends, and axes.
Equal intervals ranges are resolved into boundaries when the field is created, not
recomputed from the data. Values arriving later outside the range join the first
and last buckets instead of extending them.
CASE expression written by hand does
not.