Dimensions
All dimensions require a name, type, and can optionally include an expr parameter. The name for your Dimension must be unique within the same semantic model.
Refer to the following example to see how dimensions are used in a semantic model:
Dimensions types
This section further explains the dimension definitions, along with examples. Dimensions have the following types:
Categorical
Categorical dimensions are used to group metrics by different attributes, features, or characteristics such as product type. They can refer to existing columns in your dbt model or be calculated using a SQL expression with the expr parameter. An example of a categorical dimension is is_bulk_transaction, which is a group created by applying a case statement to the underlying column quantity. This allows users to group or filter the data based on bulk transactions.
Time
# dbt users
dbt sl query --metrics users_created,users_deleted --group-by metric_time__year --order-by metric_time__year
# dbt Core users
mf query --metrics users_created,users_deleted --group-by metric_time__year --order-by metric_time__year
You can set is_partition for time to define specific time spans.
- is_partition
- time_granularity
Use is_partition: True to show that a dimension exists over a specific time window. For example, a date-partitioned dimensional table. When you query metrics from different tables, the Semantic Layer uses this parameter to ensure that the correct dimensional values are joined to measures.
SCD Type II
MetricFlow supports joins against dimensions values in a semantic model built on top of a slowly changing dimension (SCD) Type II table. This is useful when you need a particular metric sliced by a group that changes over time, such as the historical trends of sales by a customer's country.
Basic structure
SCD Type II are groups that change values at a coarser time granularity. SCD Type II tables typically have two time columns that indicate the validity period of a dimension: valid_from (or tier_start) and valid_to (or tier_end). This creates a range of valid rows with different dimension values for a metric.
MetricFlow associates the metric with the earliest available dimension value within a coarser time window, such as a month. By default, it uses the group valid at the start of this time granularity.
MetricFlow supports the following basic structure of an SCD Type II data platform table:
| Loading table... |
entity_key(required): A unique identifier for each row in the table, such as a primary key or another unique identifier specific to the entity.valid_from(required): Start date timestamp for when the dimension is valid. Usevalidity_params: is_start: Truein the semantic model to specify this.valid_to(required): End date timestamp for when the dimension is valid. Usevalidity_params: is_end: Truein the semantic model to specify this.
Semantic model parameters and keys
When configuring an SCD Type II table in a semantic model, use validity_params to specify the start (valid_from) and end (valid_to) of the validity window for each dimension.
validity_params: Parameters that define the validity window.is_start: True: Indicates the start of the validity period. Displayed asvalid_fromin the SCD table.is_end: True: Indicates the end of the validity period. Displayed asvalid_toin the SCD table.
Here’s an example configuration:
SCD Type II tables have a specific dimension with a start and end date. To join tables:
- Set the additional entity
typeparameter to thenaturalkey. - Use a
naturalkey as an entitytype, which means you don't need aprimarykey. - In most instances, SCD tables don't have a logically usable
primarykey becausenaturalkeys map to multiple rows.
Implementation
Here are some guidelines to follow when implementing SCD Type II tables:
- The SCD table must have
valid_toandvalid_fromtime dimensions, which are logical constructs. - The
valid_fromandvalid_toproperties must be specified exactly once per SCD table configuration. - The
valid_fromandvalid_toproperties shouldn't be used or specified on the same time dimension. - The
valid_fromandvalid_totime dimensions must cover a non-overlapping period where one row matches each natural key value (meaning they must not overlap and should be distinct). - We recommend defining the underlying dbt model with dbt snapshots. This supports the SCD Type II table layout and ensures that the table is updated with the latest data.
This is an example of SQL code that shows how a sample metric called num_events is joined with versioned dimensions data (stored in a table called scd_dimensions) using a primary key made up of the entity_key and timestamp columns.
select metric_time, dimensions_1, sum(1) as num_events
from events a
left outer join scd_dimensions b
on
a.entity_key = b.entity_key
and a.metric_time >= b.valid_from
and (a.metric_time < b. valid_to or b.valid_to is null)
group by 1, 2
SCD examples
The following are examples of how to use SCD Type II tables in a semantic model:
Was this page helpful?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.