Semantic Model configuration

Download JSON Schema

Example

apiVersion: leapview.dev/v1
kind: SemanticModel
metadata:
  id: semantic-model:finance
  name: finance
  displayName: CFO Finance Model
  description: Governed CFO fact constellation with conformed finance dimensions and decision-ready metrics.
spec:
  datasets:
    financial_performance:
      model: financial_performance
      defaultTimeDimension: finance_date
    pnl_statement:
      model: pnl_statement
      defaultTimeDimension: finance_date
    variance_drivers:
      model: variance_drivers
      defaultTimeDimension: finance_date
    cash_forecast:
      model: cash_forecast
      defaultTimeDimension: week_start
    finance_dates:
      model: finance_dates
    finance_segments:
      model: finance_segments
    finance_countries:
      model: finance_countries
    finance_products:
      model: finance_products
    finance_discount_bands:
      model: finance_discount_bands
    pnl_lines:
      model: pnl_lines
    variance_driver_dimension:
      model: variance_driver_dimension
    cash_weeks:
      model: cash_weeks
    cash_scenarios:
      model: cash_scenarios
  relationships:
    financial_performance_date:
      from: {dataset: financial_performance, entity: finance_date}
      to: {dataset: finance_dates, entity: finance_date}
    pnl_statement_date:
      from: {dataset: pnl_statement, entity: finance_date}
      to: {dataset: finance_dates, entity: finance_date}
    variance_drivers_date:
      from: {dataset: variance_drivers, entity: finance_date}
      to: {dataset: finance_dates, entity: finance_date}
    financial_performance_segment:
      from: {dataset: financial_performance, entity: segment}
      to: {dataset: finance_segments, entity: segment}
    pnl_statement_segment:
      from: {dataset: pnl_statement, entity: segment}
      to: {dataset: finance_segments, entity: segment}
    variance_drivers_segment:
      from: {dataset: variance_drivers, entity: segment}
      to: {dataset: finance_segments, entity: segment}
    financial_performance_country:
      from: {dataset: financial_performance, entity: country}
      to: {dataset: finance_countries, entity: country}
    pnl_statement_country:
      from: {dataset: pnl_statement, entity: country}
      to: {dataset: finance_countries, entity: country}
    variance_drivers_country:
      from: {dataset: variance_drivers, entity: country}
      to: {dataset: finance_countries, entity: country}
    financial_performance_product:
      from: {dataset: financial_performance, entity: product}
      to: {dataset: finance_products, entity: product}
    pnl_statement_product:
      from: {dataset: pnl_statement, entity: product}
      to: {dataset: finance_products, entity: product}
    variance_drivers_product:
      from: {dataset: variance_drivers, entity: product}
      to: {dataset: finance_products, entity: product}
    financial_performance_discount_band:
      from: {dataset: financial_performance, entity: discount_band}
      to: {dataset: finance_discount_bands, entity: discount_band}
    pnl_statement_line:
      from: {dataset: pnl_statement, entity: pnl_line}
      to: {dataset: pnl_lines, entity: pnl_line}
    variance_drivers_driver:
      from: {dataset: variance_drivers, entity: variance_driver}
      to: {dataset: variance_driver_dimension, entity: variance_driver}
    cash_forecast_week:
      from: {dataset: cash_forecast, entity: cash_week}
      to: {dataset: cash_weeks, entity: cash_week}
    cash_forecast_scenario:
      from: {dataset: cash_forecast, entity: cash_scenario}
      to: {dataset: cash_scenarios, entity: cash_scenario}
  dimensions:
    finance_date:
      datatype: Date
      bindings:
        financial_performance: {field: finance_dates.finance_date, path: [financial_performance_date]}
        pnl_statement: {field: finance_dates.finance_date, path: [pnl_statement_date]}
        variance_drivers: {field: finance_dates.finance_date, path: [variance_drivers_date]}
      time:
        nativeGrain: day
        grains: [day, week, month, quarter, year]
        calendar: iso8601
    finance_month:
      datatype: String
      bindings:
        financial_performance: {field: finance_dates.finance_month, path: [financial_performance_date]}
        pnl_statement: {field: finance_dates.finance_month, path: [pnl_statement_date]}
        variance_drivers: {field: finance_dates.finance_month, path: [variance_drivers_date]}
    segment:
      datatype: String
      bindings:
        financial_performance: {field: finance_segments.segment, path: [financial_performance_segment]}
        pnl_statement: {field: finance_segments.segment, path: [pnl_statement_segment]}
        variance_drivers: {field: finance_segments.segment, path: [variance_drivers_segment]}
    country:
      datatype: String
      bindings:
        financial_performance: {field: finance_countries.country, path: [financial_performance_country]}
        pnl_statement: {field: finance_countries.country, path: [pnl_statement_country]}
        variance_drivers: {field: finance_countries.country, path: [variance_drivers_country]}
    product:
      datatype: String
      bindings:
        financial_performance: {field: finance_products.product, path: [financial_performance_product]}
        pnl_statement: {field: finance_products.product, path: [pnl_statement_product]}
        variance_drivers: {field: finance_products.product, path: [variance_drivers_product]}
    discount_band:
      datatype: String
      bindings:
        financial_performance: {field: finance_discount_bands.discount_band, path: [financial_performance_discount_band]}
    scorecard_group:
      datatype: String
      bindings:
        financial_performance: {field: financial_performance.scorecard_group}
    record_id:
      datatype: String
      bindings:
        financial_performance: {field: financial_performance.record_id}
    pnl_line:
      datatype: String
      bindings:
        pnl_statement: {field: pnl_lines.pnl_line, path: [pnl_statement_line]}
    pnl_group:
      datatype: String
      bindings:
        pnl_statement: {field: pnl_statement.pnl_group}
    line_order:
      label: Line
      datatype: Integer
      bindings:
        pnl_statement: {field: pnl_lines.line_order, path: [pnl_statement_line]}
    variance_driver:
      datatype: String
      bindings:
        variance_drivers: {field: variance_driver_dimension.driver, path: [variance_drivers_driver]}
    driver_order:
      datatype: Integer
      bindings:
        variance_drivers: {field: variance_driver_dimension.driver_order, path: [variance_drivers_driver]}
    week_start:
      datatype: Date
      bindings:
        cash_forecast: {field: cash_weeks.week_start, path: [cash_forecast_week]}
      time:
        nativeGrain: day
        grains: [day, week, month]
        calendar: iso8601
    week_label:
      label: Week
      datatype: String
      bindings:
        cash_forecast: {field: cash_weeks.week_label, path: [cash_forecast_week]}
    scenario:
      datatype: String
      bindings:
        cash_forecast: {field: cash_scenarios.scenario, path: [cash_forecast_scenario]}
    scenario_group:
      datatype: String
      bindings:
        cash_forecast: {field: cash_scenarios.scenario_group, path: [cash_forecast_scenario]}
  metrics:
    units_sold:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.units_sold}
      empty: zero
      label: Units sold
      format: decimal
    gross_sales:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.gross_sales}
      empty: zero
      label: Gross sales
      unit: USD
      format: currency
    discounts:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.discounts}
      empty: zero
      label: Discounts
      unit: USD
      format: currency
    net_sales:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.net_sales}
      empty: zero
      label: Net revenue
      unit: USD
      format: currency
    cogs:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.cogs}
      empty: zero
      label: Cost of goods sold
      unit: USD
      format: currency
    gross_profit:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.gross_profit}
      empty: zero
      label: Gross profit
      unit: USD
      format: currency
    budget_sales:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.budget_sales}
      empty: zero
      label: Budget revenue
      unit: USD
      format: currency
    budget_gross_profit:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.budget_gross_profit}
      empty: zero
      label: Budget gross profit
      unit: USD
      format: currency
    forecast_sales:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.forecast_sales}
      empty: zero
      label: Forecast revenue
      unit: USD
      format: currency
    forecast_gross_profit:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.forecast_gross_profit}
      empty: zero
      label: Forecast gross profit
      unit: USD
      format: currency
    ebitda:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.ebitda}
      empty: zero
      label: EBITDA
      unit: USD
      format: currency
    budget_ebitda:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.budget_ebitda}
      empty: zero
      label: Budget EBITDA
      unit: USD
      format: currency
    forecast_ebitda:
      type: aggregate
      dataset: financial_performance
      aggregation: sum
      input: {field: financial_performance.forecast_ebitda}
      empty: zero
      label: Forecast EBITDA
      unit: USD
      format: currency
    gross_margin:
      type: ratio
      numerator: gross_profit
      denominator: net_sales
      label: Gross margin
      format: percent
    budget_gross_margin:
      type: ratio
      numerator: budget_gross_profit
      denominator: budget_sales
      label: Budget gross margin
      format: percent
    ebitda_margin:
      type: ratio
      numerator: ebitda
      denominator: net_sales
      label: EBITDA margin
      format: percent
    discount_rate:
      type: ratio
      numerator: discounts
      denominator: gross_sales
      label: Discount rate
      format: percent
    revenue_variance:
      type: derived
      expression: ${net_sales} - ${budget_sales}
      label: Revenue variance
      unit: USD
      format: currency
    revenue_variance_percent:
      type: ratio
      numerator: revenue_variance
      denominator: budget_sales
      label: Revenue variance %
      format: percent
    gross_profit_variance:
      type: derived
      expression: ${gross_profit} - ${budget_gross_profit}
      label: Gross profit variance
      unit: USD
      format: currency
    ebitda_variance:
      type: derived
      expression: ${ebitda} - ${budget_ebitda}
      label: EBITDA variance
      unit: USD
      format: currency
    pnl_actual:
      type: aggregate
      dataset: pnl_statement
      aggregation: sum
      input: {field: pnl_statement.actual_amount}
      empty: zero
      label: Actual
      unit: USD
      format: currency
    pnl_budget:
      type: aggregate
      dataset: pnl_statement
      aggregation: sum
      input: {field: pnl_statement.budget_amount}
      empty: zero
      label: Budget
      unit: USD
      format: currency
    pnl_forecast:
      type: aggregate
      dataset: pnl_statement
      aggregation: sum
      input: {field: pnl_statement.forecast_amount}
      empty: zero
      label: Forecast
      unit: USD
      format: currency
    pnl_variance:
      type: aggregate
      dataset: pnl_statement
      aggregation: sum
      input: {field: pnl_statement.variance_amount}
      empty: zero
      label: F/(U)
      unit: USD
      format: currency
    variance_impact:
      type: aggregate
      dataset: variance_drivers
      aggregation: sum
      input: {field: variance_drivers.impact}
      empty: zero
      label: EBITDA variance impact
      unit: USD
      format: currency
    collections:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.collections}
      empty: zero
      label: Collections
      unit: USD
      format: currency
    supplier_payments:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.supplier_payments}
      empty: zero
      label: Supplier payments
      unit: USD
      format: currency
    net_cash_flow:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.net_cash_flow}
      empty: zero
      label: Net cash flow
      unit: USD
      format: currency
    base_collections:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.base_collections}
      empty: zero
      label: Base collections
      unit: USD
      format: currency
    base_supplier_payments:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.base_supplier_payments}
      empty: zero
      label: Base supplier payments
      unit: USD
      format: currency
    base_net_cash_flow:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.base_net_cash_flow}
      empty: zero
      label: Base net cash flow
      unit: USD
      format: currency
    closing_cash:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.closing_cash}
      empty: zero
      label: Closing cash
      unit: USD
      format: currency
    scenario_ending_cash:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.scenario_ending_cash}
      empty: 'null'
      label: Ending cash
      unit: USD
      format: currency
    scenario_headroom:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.scenario_headroom}
      empty: 'null'
      label: Headroom
      unit: USD
      format: currency
    scenario_cumulative_net_cash_flow:
      type: aggregate
      dataset: cash_forecast
      aggregation: sum
      input: {field: cash_forecast.net_cash_flow}
      empty: zero
      label: Net cash flow
      unit: USD
      format: currency
    current_cash:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.current_cash}
      empty: 'null'
      label: Current cash
      unit: USD
      format: currency
    base_ending_cash:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.base_ending_cash}
      empty: 'null'
      label: Base ending cash
      unit: USD
      format: currency
    base_headroom:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.base_headroom}
      empty: 'null'
      label: Base cash headroom
      unit: USD
      format: currency
    overdue_receivables:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.overdue_receivables}
      empty: 'null'
      label: Overdue receivables
      unit: USD
      format: currency
    dso_days:
      type: aggregate
      dataset: cash_forecast
      aggregation: max
      input: {field: cash_forecast.dso_days}
      empty: 'null'
      label: Days sales outstanding
      format: decimal

Fields

Field Type Required Rules
aiContext AIContext No
apiVersion string Yes one of leapview.dev/v1
kind SemanticModel Yes
metadata SemanticModelMetadata Yes
spec SemanticModelSpec Yes

Nested definitions

AIContext

Field Type Required Rules
examples array of string No
instructions string No
synonyms array of string No

AggregateSemanticMetric

Field Type Required Rules
aggregation string Yes one of sum, count, count_distinct, avg, min, max
aiContext AIContext No
dataset string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
description string No
empty string No one of zero, null
format string No
hidden boolean No
input SemanticMetricInput Yes
label string No
requiredAccessGrants array of string No
timeDimension string No pattern ^[A-Za-z_][A-Za-z0-9_]*$
type string Yes one of aggregate
unit string No
where array of string No

AllSemanticFilter

Field Type Required Rules
all array of SemanticFilter Yes

AnySemanticFilter

Field Type Required Rules
any array of SemanticFilter Yes

DerivedSemanticMetric

Field Type Required Rules
aiContext AIContext No
description string No
expression string Yes
format string No
hidden boolean No
label string No
requiredAccessGrants array of string No
type string Yes one of derived
unit string No

EqualsSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of equals
path array of string No
value SemanticLiteral Yes

FieldsSemanticRelationshipEndpoint

Field Type Required Rules
dataset string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
fields array of string Yes

GreaterThanOrEqualSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of greater_than_or_equal
path array of string No
value SemanticLiteral Yes

GreaterThanSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of greater_than
path array of string No
value SemanticLiteral Yes

InSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of in
path array of string No
value array of SemanticLiteral Yes

IsNotNullSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of is_not_null
path array of string No

IsNullSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of is_null
path array of string No

LessThanOrEqualSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of less_than_or_equal
path array of string No
value SemanticLiteral Yes

LessThanSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of less_than
path array of string No
value SemanticLiteral Yes

NamedSemanticRelationshipEndpoint

Field Type Required Rules
dataset string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
entity string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$

NotEqualsSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of not_equals
path array of string No
value SemanticLiteral Yes

NotInSemanticFilter

Field Type Required Rules
aiContext AIContext No
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
operator string Yes one of not_in
path array of string No
value array of SemanticLiteral Yes

NotSemanticFilter

Field Type Required Rules
not SemanticFilter Yes

RatioSemanticMetric

Field Type Required Rules
aiContext AIContext No
denominator string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
description string No
format string No
hidden boolean No
label string No
numerator string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
requiredAccessGrants array of string No
type string Yes one of ratio
unit string No

ResourceProvenance

Field Type Required Rules
origin string No
path string No
source string No

SemanticAccessFilter

Field Type Required Rules
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$
userAttribute string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$

SemanticAccessGrant

Field Type Required Rules
allowedValues SemanticAllowedValues Yes
userAttribute string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*$

SemanticAllowedValues

Field Type Required Rules

SemanticDataset

Field Type Required Rules
accessFilters array of SemanticAccessFilter No
aiContext AIContext No
defaultTimeDimension string No pattern ^[A-Za-z_][A-Za-z0-9_]*$
description string No
displayName string No
model string Yes pattern ^[A-Za-z_][A-Za-z0-9_.-]*$
requiredAccessGrants array of string No

SemanticDimension

Field Type Required Rules
aiContext AIContext No
bindings object Yes
datatype string Yes one of String, Integer, Decimal, Float, Boolean, Date, Time, DateTime, DateTimeTz, Opaque
description string No
label string No
requiredAccessGrants array of string No
time SemanticTimeSemantics No

SemanticDimensionBinding

Field Type Required Rules
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$
path array of string No

SemanticFilter

Field Type Required Rules

SemanticLiteral

Field Type Required Rules

SemanticMetric

Field Type Required Rules

SemanticMetricAggregateVariant

Field Type Required Rules
type string Yes one of aggregate

SemanticMetricDerivedVariant

Field Type Required Rules
type string Yes one of derived

SemanticMetricInput

Field Type Required Rules
field string Yes pattern ^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$

SemanticMetricRatioVariant

Field Type Required Rules
type string Yes one of ratio

SemanticModel

Field Type Required Rules
aiContext AIContext No
apiVersion string Yes one of leapview.dev/v1
kind SemanticModel Yes
metadata SemanticModelMetadata Yes
spec SemanticModelSpec Yes

SemanticModelMetadata

Field Type Required Rules
description string No
displayName string No
documentation string No
domain string No
id string Yes pattern ^[A-Za-z0-9][A-Za-z0-9_.:-]*$
name string Yes pattern ^[A-Za-z_][A-Za-z0-9_.-]*$
owner string No
provenance ResourceProvenance No
tags array of string No

SemanticModelSpec

Field Type Required Rules
accessGrants object No
datasets object Yes
dimensions object No
filters object No
metrics object Yes
relationships object No

SemanticRelationship

Field Type Required Rules
aiContext AIContext No
description string No
from SemanticRelationshipEndpoint Yes
to SemanticRelationshipEndpoint Yes

SemanticRelationshipEndpoint

Field Type Required Rules

SemanticTimeSemantics

Field Type Required Rules
calendar string No
grains array of string Yes
nativeGrain string Yes one of second, minute, hour, day, week, month, quarter, year
timezone string No