Lookerのシンメトリック集計を理解する #Looker

2023.08.10

Looker勉強中のikumiです。今回は、Lookerのシンメトリック集計の機能とはどういったものなのかをまとめてみました。

シンメトリック集計とは

結合によってレコードが重複し正しく集計されない場合においても、正しく集計を行える機能のこと

分かりやすくイメージで説明

  • 結合したいデータ
    • 顧客データと問い合わせ件数のデータ
  • 普通に結合すると・・
    • customer_idで結合した場合、問い合わせが2件あったAの顧客はデータが重複しています
    • その結果、license_numの合計値もずれてしまいます
  • シンメトリック集計では、この合計値のずれが出ないように集計してくれます

シンメトリック集計を適用させるには

シンメトリック集計を行うには、以下の2つの設定を正しく設定する必要があります

  • joinするそれぞれのviewファイルでprimary_key(主キー)を設定する
  • joinで正しいrelationshipを設定する

joinするそれぞれのviewファイルでprimary_key(主キー)を設定する

今回のユースケースでは、license_numを正しく集計するためには各行の合計を一回のみカウントする必要があります。そのために、一意となるキーを判断するためにprimary_keyの設定を正しく設定します

  dimension: customer_id {
    primary_key: yes
    label: "顧客ID"
    type: string
    sql: ${TABLE}.customer_id ;;
  }

joinで正しいrelationshipを設定する

また、結合するそれぞれのテーブルの関係を宣言することで適切な集計が行われます。relationshipについては、公式ドキュメントでも確認できるようになっています。

explore: synmetric {
  join: synmetric_02 {
    relationship: one_to_many
    sql_on: ${synmetric.customer_id} = ${synmetric_02.customer_id} ;;
  }
}

補足:symmetric_aggregatesパラメーターについて

シンメトリック集計の適用を宣言するには、symmetric_aggregatesといったパラメーターを使用します。しかし、通常このパラメーターは省略されてデフォルトでyesになっているので、シンメトリック集計を無効にする場合のみこのパラメーターを使用します

explore: synmetric {
  join: synmetric_02 {
    symmetric_aggregates: yes
  ##適用しない場合ここはnoになる
  }
}

シンメトリック集計の結果を確認する

  • シンメトリック集計が適用されている
explore: synmetric {
  join: synmetric_02 {
    relationship: one_to_many
    sql_on: ${synmetric.customer_id} = ${synmetric_02.customer_id} ;;
  }
}

  • シンメトリック集計が適用されていない(間違ったrelationship)
explore: synmetric {
  join: synmetric_02 {
    relationship: one_to_one
    sql_on: ${synmetric.customer_id} = ${synmetric_02.customer_id} ;;
  }
}

この通り、正しく集計されていました!

さいごに

いかがでしたでしょうか。シンメトリック集計は便利な機能ですよね。とはいえ、シンメトリック集計はパフォーマンスにも少なからず影響があるそうですので、多用するのが避けた方がベターかもしれません。また、データを普段から扱っている方は意識している通り、結合を行う際にはレコード重複が出ないように一意のキー同士で結合したり、そもそもマートを整備したりといった基本的なデータ扱いは意識して取り組みましょう。