Looker でのバケットの作成

カスタム フィールドの作成権限がある場合、ディメンション用にアドホック カスタム グループを作成するのに、Looker 式内で論理関数使用したり、sqlパラメータやtype: caseフィールドでCASE WHEN論理を作成したりする必要はありません。
また、カスタム フィールドの作成権限がある場合、数値タイプのディメンション用にアドホック カスタム ビンを作成するのに、Looker 式内で論理関数を使用したり、type: tier LookML フィールドを作成したりする必要はありません。

バケット化は、Looker でカスタム グループ化ディメンションを作成する場合に非常に便利です。

Looker では、以下の 3 つの方法でバケットを作成できます。

  1. tier dimension タイプの使用
  2. case パラメータの使用
  3. LookML フィールドの SQL パラメータで SQL CASE WHEN ステートメントを使用

バケット化に tier を使用

整数バケットを作成するには、dimension 型を tier として定義します。

dimension: users_lifetime_orders_tier {
  type: tier
  tiers: [0,1,2,5,10]
  sql: ${users_lifetime_orders} ;;
}

style パラメータを使用すると、探索時の階層の表示方法をカスタマイズできます。style の 4 つのオプションは次のとおりです。

  1. classic
  2. integer
  3. interval
  4. relational

例:

dimension: age_tier {
  type: tier
  tiers: [0,10,20,30,40,50,60,70,80]
  style: integer
  sql: ${age} ;;
}

style パラメータの classic はデフォルトで、Tx[x,x] という形式を取ります。Tx は階層番号を示し、[x,x] は範囲を示します。次の画像は、Users CountUsers Age でグループ化された Explore のデータ表です。

このデータ表で、使用可能なユーザーの年齢層の上位は T02[10,20] で、10 ~ 20 歳までの 808 人のユーザー数を示しています。

次の図は、他の style パラメータ オプションの例を示しています。

  • interval - 階層の最小値と最大値を示す [x,x] の形式
  • integer - 階層の最小値と最大値を示す x to x の形式
  • relational - 値が階層の最小値以上かつ階層の最大値未満であることを示す、>= x and <x の形式

注意点

tierディメンション フィルと組み合わせて使用すると、予期しない階層バケットが発生する可能性があります。

たとえば、type: tier ディメンション Age Tier には、ディメンション フィルが有効になっていると 0 未満および 0 ~ 9 の階層バケットが表示されます。ただし、データにはそれらのバケットの経過時間の値は含まれていません。

Age Tier のディメンション フィルが無効になっていると、バケットはデータで使用可能な年齢の値をより正確に反映し、バケット 10 ~ 19 から開始します。

ディメンション フィルを有効または無効にするには、[Explore] 内のディメンション名にカーソルを合わせてフィールド レベルの歯車アイコンをクリックし、[Remove Filled in Tier Values] を選択して無効にするか、[Fill Missing Tier Values] を選択して有効にします。

Looker tiers について詳しくは、ディメンション、フィルタ、パラメータ タイプに関するドキュメント ページをご覧ください。

バケット化に case を使用する

case パラメータを使用すると、カスタムの並べ替えでカスタム名のバケットを作成できます。case パラメータは、UI フィルタおよび可視化での値の表示方法、順序付け方法、使用方法を制御するのに役立つため、固定されたバケットのセットにおすすめします。たとえば、case を使用すると、ユーザーはフィルタで定義されたバケット値のみを選択できます。

case を使用してバケットを作成するには、注文額のバケットなどのディメンションを定義します。

  dimension: order_amount_bucket {
    case: {
      when: {
        sql: ${order_amount} <= 50;;
        label: "Small"
      }
      when: {
        sql: ${order_amount} > 50 AND ${order_amount} <= 150;;
        label: "Medium"
      }
      when: {
        sql: ${order_amount} > 150;;
        label: "Large"
      }
      else:"Unknown"
    }
  }

通常、case パラメータは、バケットがリストされている順序で値を並べ替えます。order_amount_bucket ディメンションの場合、バケットの順序は SmallMediumLarge です。

英数字で並べ替える場合は、ディメンションに alpha_sort パラメータを 次のように追加します。

  dimension: order_amount_bucket {
    alpha_sort: yes
    case: {
      when: {
        sql: ${order_amount} <= 50;;
        label: "Small"
      }
      when: {
        sql: ${order_amount} > 50 AND ${order_amount} <= 150;;
        label: "Medium"
      }
      when: {
        sql: ${order_amount} > 150;;
        label: "Large"
      }
      else:"Unknown"
    }
  }

出力に異なる多数の値が必要なディメンションの場合(WHEN または ELSE ステートメントで各出力を定義する必要があります)、またはより複雑な ELSE ステートメントを実装する場合については、次のセクションで説明する SQL CASE WHEN を使用することをおすすめします。

case パラメータの詳細については、フィールド パラメータのドキュメント ページをご覧ください。

バケット化に SQL CASE WHEN を使用する

複雑なバケット化や、よりきめ細かな ELSE ステートメントの実装には、SQL CASE WHEN ステートメントをおすすめします。

たとえば、注文の宛先に応じて異なるバケット化方法を使用できます。SQL の CASE WHEN ステートメントを使用すると、複合バケットのディメンションを作成できます。その場合、THEN ステートメントは文字列ではなくディメンションを返します。

dimension: compound_buckets {
  sql:
    CASE
      WHEN ${orders.destination} = 'US' THEN ${us_buckets}
      WHEN ${orders.destination} = 'CA' THEN ${canada_buckets}
    ELSE ${intl_buckets}
    END ;;
}