The most frequently confused concept on the Looker Certified Explorer exam is the relationship between dimensions and measures in LookML. Both are fields. Both appear in the Explore field picker. But they work completely differently, they appear in different sections of the field picker, and choosing the wrong one produces incorrect or misleading results.
What Is the Actual Difference Between a Dimension and a Measure?
A dimension is a field you use to describe, group, or filter data. It represents a property of a single row — an order's status, a user's country, a product's category. When you add a dimension to an Explore query, you are asking Looker to group results by that value.
A measure is a field that aggregates data across rows — a count, a sum, an average. It answers the question "how many?" or "how much?" for a group. Measures do not make sense at the individual row level; they only have meaning when applied to a set of rows defined by the dimensions you have selected.
| Characteristic | Dimension | Measure |
|---|---|---|
| SQL role | Appears in SELECT and GROUP BY | Appears in SELECT as an aggregate function |
| Row-level meaning | Has a value per row | Computed across many rows |
| Common LookML types | number, string, yesno, time, tier | count, count_distinct, sum, average, max, min |
| Filterable at SQL level | Yes | Only via HAVING (requires a dimension) |
| Field picker section | "Dimensions" section | "Measures" section |
| Exam tip | Think "GROUP BY" | Think "aggregate function" |
LookML Examples: Three Dimension Types and Two Measure Types
view: orders {
sql_table_name: "ecommerce"."orders" ;;
# --- DIMENSIONS ---
# type: string — a text field, no aggregation
dimension: status {
type: string
sql: ${TABLE}.order_status ;;
label: "Order Status"
}
# type: number — a numeric value at the row level (not a sum or average)
dimension: days_to_ship {
type: number
sql: DATEDIFF(${TABLE}.shipped_at, ${TABLE}.created_at) ;;
label: "Days to Ship"
}
# type: yesno — creates a true/false dimension from a SQL condition
dimension: is_returned {
type: yesno
sql: ${TABLE}.returned_at IS NOT NULL ;;
label: "Returned?"
}
# --- MEASURES ---
# type: count — counts rows (with optional filter)
measure: order_count {
type: count
label: "Number of Orders"
drill_fields: [order_id, status, total_revenue]
}
# type: sum — sums a numeric column across rows
measure: total_revenue {
type: sum
sql: ${TABLE}.revenue ;;
label: "Total Revenue"
value_format_name: usd
}
}
What the Exam Actually Tests About Dimensions and Measures
The exam does not ask you to write LookML from scratch, but it does present code snippets and asks what a field does or what type it should be given a scenario. Common question patterns include: "A developer needs to count only orders where the status is 'complete'. What LookML field type and approach is correct?" (Answer: a measure of type: count with a filter parameter, not a dimension of type: yesno). Or: "Which of the following would appear in the GROUP BY clause of the SQL Looker generates?" (Answer: dimensions, not measures).