view: view_name {
  measure:  field_name { ... }
A Looker identifier to name the measure


The measure parameter declares a new measure (aggregation) and specifies a name for that measure.

There are several criteria for a measure's name:

  • It must be unique within any given view.
  • It must consist of characters a through z (no capital letters), 0 through 9, or _.
  • It must start with a letter.

There are many types of measures, as discussed further on the Measure types documentation page.


Create measures named product_count and total_value in a view named products:

view: products {
  measure: product_count {
    type: count
  measure: total_value {
    sql: ${value} ;;
    type: sum

Things to know

Measures in joined views

To have measures (aggregations) come through joins, you must define primary keys in all the views that are involved in the join.

You can do this by adding the primary_key parameter to the primary key field definition in each view:

dimension: id {
  type: number
  primary_key: yes

To correctly handle joined measures, Looker relies on you specifying a primary key where the values are completely unique, non-NULL values. If your data does not contain a primary key, consider whether the concatenation of several fields would result in a primary key of completely unique, non-NULL values. If your primary key is not unique or contains NULL values and your query includes data that reveals those issues, then Looker returns an error as described in the Error: Non-Unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum Best Practices page.

Measures based on other measures

It is possible to define a measure that is based on another measure. The new measure must be of type: number to avoid nested-aggregation errors. See the documentation on type: number for measures for an example and explanation.