Visual calculations
Visual calculations are governed post-aggregation analysis attached to one visual. They operate only on fields already present in that visual’s compiled result frame. They do not query the semantic model, traverse model relationships, or accept arbitrary formulas.
Choose the right calculation layer
Use a semantic measure when the business definition should be reused across visuals, dashboards, APIs, exports, or agents. Revenue, gross margin, active customers, and other governed business concepts belong in the semantic model.
Use a visual calculation when the input is already aggregated and the analysis depends on the displayed structure or ordering. Running totals, moving averages, period differences, percent of parent, percent of grand total, rank, cumulative contribution, and a lookup within the visible frame are good examples.
A visual calculation is stored with one visual. Its result changes with the visual’s governed filters and compiled frame, but it cannot change the meaning of the source measure.
Author a closed template
visuals:
monthly_revenue:
type: line
title: Revenue and running total
calculations:
- id: running_revenue
label: Running revenue
template: running_total
source: value
axis: rows
order_by:
- field: label
direction: asc
format: currency
query:
dimensions:
month: orders.purchase_month
measures:
revenue: null
sort:
- field: month
direction: asc
limit: 30
source, order_by, partition_by, parent, and lookup.field address compiled result-frame aliases. They never contain SQL, DAX, JavaScript, or semantic expressions. For built-in categorical charts, the common aliases are label, series, and value. Tables and point visuals retain their explicit query aliases.
The supported templates are:
running_totalmoving_averagedifferencepercentage_differencepercent_of_parentpercent_of_grand_totalrankcumulative_contributionlookup
Order-sensitive templates require an explicit order_by. moving_average also requires a positive window. percent_of_parent requires parent or partition_by, and lookup requires one unambiguous field/value match within each partition.
Ordering is stable: authored sort fields are applied in sequence, equal values retain result-frame order, and null order values sort last in either direction. Null source values produce null at that row and do not poison later running totals, moving averages, shares, or cumulative contributions.
Axes, partitions, and reset
axis is one of rows, columns, hierarchy, or facets. Use partition_by to keep independent series, facets, matrix rows, or hierarchy branches from affecting one another.
reset: highest_parent uses the first declared hierarchy partition. reset: lowest_parent uses all declared hierarchy partitions. reset: none keeps the explicit partition unchanged.
Fields used only to order, partition, or look up a result can set hidden: true. Hidden fields remain in the governed frame and provenance metadata but are not rendered as a chart series or table column.
Completeness and provenance
Every compiled field identifies whether it is modeled, aggregated, or visually calculated. Visual-calculation fields retain their calculation ID and source aliases, so tooltips, exports, accessibility projections, and agent results can distinguish them from semantic measures.
Inline calculations run over the complete bounded result frame. Calculated tables evaluate one deterministic, bounded visible frame before virtualized windows are sliced, so scrolling does not restart a running total. If a query reaches its row cap or otherwise returns an incomplete frame, LeapView marks the visual partial and emits a visual_calculation_incomplete_frame diagnostic. It never presents a rank, total, or percentage over a truncated frame as complete.