[小ネタ]Lookerのmeasure type:listを使ってみる #looker

2024.02.19

Lookerのメジャータイプには様々なものが用意されています。今回はその中であまりなじみのなかったlistを使ってみました。

メジャータイプ『list』とは

パラメーター名から想像できる通りtype:listでは、指定したディメンションの値をリストとして表示することができるメジャータイプです。このメジャータイプではsqlパラメーターが不要で、代わりにlist_fieldパラメーターでリスト化するフィールドを宣言します。

公式Doc:list

早速使ってみる

Viewファイルの定義

  • 部門ごとのカテゴリをリスト化する想定でフィールドを定義しました
dimension: department {
    label: "部門"
    sql: TRIM(${TABLE}.department) ;;
  }

dimension: category {
    label: "カテゴリ"
    sql: TRIM(${TABLE}.category) ;;
  }

measure: category_list {
    type: list
    list_field: category
  }

Exploreで結果を確認

  • 結果を確認すると、部門ごとのカテゴリがリスト化されて算出されていました!

メジャータイプ『string』でも同じことができそうである

メジャータイプ『string』とは

Lookerにはメジャータイプtype:stringというのも存在します。type:stringでは、結果が文字列になるSQL 式を使用できますが、基本的にメジャーは数値で表すものがほとんどなので、この計算タイプの出番は基本的にはありません。しかし、一般的な例外としてあるのが文字列をリストで返すような関数になります。つまり、type:listは、そういった関数をLookerが事前定義してくれたメジャータイプということになります。

公式Doc:string

『list』と『string』両方使ってみる

  • 先ほどのViewファイルに、type:stringで定義したカテゴリーリストを追加します
dimension: department {
    label: "部門"
    sql: TRIM(${TABLE}.department) ;;
  }

dimension: category {
    label: "カテゴリ"
    sql: TRIM(${TABLE}.category) ;;
  }

measure: category_list {
    type: list
    list_field: category
  }

measure: category_string2 {
    type: string
    sql: STRING_AGG( DISTINCT ${category}  ORDER BY ${category}) ;;
  }

Exploreで結果を確認

  • 以下の通り、どちらも同じ結果になりました!

リスト化を行いたいときの『string』ユースケースについて

  • 検証した通り、リスト化する場合の結果についてはtype:stringでもtype:listでも変わらないので、type:listを使う方が便利だと感じました。
  • しかし、あえてtype:stringを使うとすれば、並び替えの順序を変えたり、結合記号を変えたい場合に使うのが良いのかなと思います。
measure: category_list {
    type: list
    list_field: category
  }

  measure: category_string2 {
    type: string
    sql: STRING_AGG( DISTINCT ${category} ," _ " ORDER BY ${category} desc) ;;
    ##並び順を降順にして、結合記号をアンダースコアにする
  }

さいごに

いかがでしたでしょうか。改めて、Lookerは便利なパラメーターが取り揃えられているな、と感じました。今後も色々な機能を試していきたいと思います。