Bird
Raised Fist0
dbtdata~10 mins

Metric definitions and semantic layer in dbt - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a simple metric that counts orders.

dbt
metrics:
  - name: order_count
    model: orders
    label: "Order Count"
    type: [1]
Drag options to blanks, or click blank then click option'
Amax
Bsum
Caverage
Dcount
Attempts:
3 left
💡 Hint
Common Mistakes
Using sum instead of count for counting rows.
Using average or max which are for numeric aggregations.
2fill in blank
medium

Complete the code to define a metric that sums the revenue column.

dbt
metrics:
  - name: total_revenue
    model: sales
    label: "Total Revenue"
    type: [1]
    sql: revenue
Drag options to blanks, or click blank then click option'
Asum
Baverage
Ccount
Dmin
Attempts:
3 left
💡 Hint
Common Mistakes
Using count which counts rows, not sums values.
Using average or min which calculate different statistics.
3fill in blank
hard

Fix the error in the metric definition by completing the missing field.

dbt
metrics:
  - name: average_order_value
    model: orders
    label: "Average Order Value"
    type: sum
    sql: total_amount
    [1]: order_count
Drag options to blanks, or click blank then click option'
Aexpression
Bfilter
Ctimestamp
Ddrill_fields
Attempts:
3 left
💡 Hint
Common Mistakes
Using filter or timestamp which are unrelated here.
Using drill_fields which is for navigation, not calculation.
4fill in blank
hard

Fill both blanks to create a semantic layer metric that filters by date and groups by customer.

dbt
metrics:
  - name: monthly_revenue
    model: sales
    label: "Monthly Revenue"
    type: sum
    sql: amount
    filters:
      - field: [1]
        operator: >=
        value: '2024-01-01'
    dimensions:
      - [2]
Drag options to blanks, or click blank then click option'
Aorder_date
Bcustomer_id
Camount
Dregion
Attempts:
3 left
💡 Hint
Common Mistakes
Filtering on amount instead of date.
Grouping by amount or region instead of customer.
5fill in blank
hard

Fill all three blanks to define a metric with a time grain, filter, and label.

dbt
metrics:
  - name: daily_active_users
    model: user_activity
    label: [1]
    type: count
    time_grains:
      - [2]
    filters:
      - field: [3]
        operator: =
        value: 'active'
Drag options to blanks, or click blank then click option'
A"Daily Active Users"
Bday
Cstatus
Dmonth
Attempts:
3 left
💡 Hint
Common Mistakes
Using month instead of day for daily metrics.
Filtering on wrong field instead of status.

Practice

(1/5)
1. What is the main purpose of defining metrics in dbt's semantic layer?
easy
A. To standardize how key numbers are calculated and used across reports
B. To create visual dashboards automatically
C. To store raw data from different sources
D. To write SQL queries faster

Solution

  1. Step 1: Understand metric definitions

    Metric definitions specify how to calculate important numbers like sales or counts.
  2. Step 2: Connect metric definitions to semantic layer purpose

    The semantic layer uses these definitions to ensure everyone uses the same calculations, keeping reports consistent.
  3. Final Answer:

    To standardize how key numbers are calculated and used across reports -> Option A
  4. Quick Check:

    Metric definitions = Standard calculations [OK]
Hint: Metrics = consistent numbers everyone trusts [OK]
Common Mistakes:
  • Thinking metrics create dashboards automatically
  • Confusing metrics with raw data storage
  • Believing metrics speed up SQL writing
2. Which of the following is the correct syntax to define a simple count metric in a dbt metric YAML file?
easy
A. metrics: - name: user_count model: 'users' label: 'User Count' type: sum
B. metrics: - name: user_count model: ref('users') label: 'User Count' type: sum
C. metrics: - name: user_count model: ref('users') label: 'User Count' type: count
D. metrics: - name: user_count model: ref('users') label: 'User Count' type: average

Solution

  1. Step 1: Identify correct metric type for counting

    The metric type for counting rows is 'count', not 'sum' or 'average'.
  2. Step 2: Check model reference syntax

    Using ref('users') is correct to link the metric to the 'users' model.
  3. Final Answer:

    metrics: - name: user_count model: ref('users') label: 'User Count' type: count -> Option C
  4. Quick Check:

    Count metric uses type 'count' and ref() [OK]
Hint: Count metrics use type 'count' and model with ref() [OK]
Common Mistakes:
  • Using 'sum' or 'average' instead of 'count' for counting
  • Not using ref() for model reference
  • Incorrect indentation or YAML structure
3. Given this metric definition in dbt YAML:
metrics:
  - name: total_revenue
    model: ref('orders')
    label: 'Total Revenue'
    type: sum
    sql: amount

What will be the output of querying this metric if the 'orders' table has amounts: [100, 200, 300]?
medium
A. 600
B. 3
C. 100
D. 900

Solution

  1. Step 1: Understand metric type and SQL field

    The metric type is 'sum' on the 'amount' field, so it adds all amounts.
  2. Step 2: Calculate sum of amounts

    Sum of [100, 200, 300] = 100 + 200 + 300 = 600.
  3. Final Answer:

    600 -> Option A
  4. Quick Check:

    Sum amounts = 600 [OK]
Hint: Sum metric adds all values in the specified column [OK]
Common Mistakes:
  • Confusing sum with count (3 rows)
  • Picking a single value instead of sum
  • Adding incorrectly
4. You wrote this metric definition in dbt YAML:
metrics:
  - name: avg_order_value
    model: ref('orders')
    label: 'Average Order Value'
    type: avg
    sql: total_price

But when you run your report, the average is incorrect. What is the likely error?
medium
A. The metric type 'average' is invalid; it should be 'avg'
B. The metric type should be 'average' instead of 'avg'
C. The model reference should not use ref()
D. The 'sql' field should be 'amount' instead of 'total_price'

Solution

  1. Step 1: Check valid metric types in dbt

    dbt metric types include 'average' for average, not 'avg'.
  2. Step 2: Identify the impact of wrong type

    Using 'avg' is invalid and causes incorrect calculation or errors.
  3. Final Answer:

    The metric type should be 'average' instead of 'avg' -> Option B
  4. Quick Check:

    Use 'average' for average metric type [OK]
Hint: Use 'average' not 'avg' for average metrics [OK]
Common Mistakes:
  • Using 'avg' instead of 'average' as metric type
  • Changing model reference incorrectly
  • Assuming 'sql' field name is wrong
5. You want to create a metric that calculates the percentage of active users out of total users using dbt's semantic layer. Which approach correctly defines this metric?
hard
A. Create a metric with type 'sum' on a boolean field active
B. Define a single metric with type 'percentage' and sql 'active = true / total users'
C. Define a metric with type 'count' and sql 'active / total' directly in one metric
D. Define two separate metrics: one for active_user_count (type: count with filter active=true) and one for total_user_count (type: count), then create a derived metric dividing active_user_count by total_user_count

Solution

  1. Step 1: Understand metric composition in dbt semantic layer

    Complex metrics like percentages are built by combining simpler metrics, not by writing raw SQL in one metric.
  2. Step 2: Define filtered and total counts separately

    Define active_user_count with a filter for active=true, and total_user_count without filter.
  3. Step 3: Create derived metric for percentage

    Use a derived metric that divides active_user_count by total_user_count to get the percentage.
  4. Final Answer:

    Define two separate metrics: one for active_user_count (type: count with filter active=true) and one for total_user_count (type: count), then create a derived metric dividing active_user_count by total_user_count -> Option D
  5. Quick Check:

    Build complex metrics by combining simple filtered metrics [OK]
Hint: Build percentages by combining filtered count metrics [OK]
Common Mistakes:
  • Trying to write raw SQL for percentage in one metric
  • Using invalid metric types like 'percentage'
  • Summing boolean fields without filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard