使用状況
dimension: field_name {
case:
when: [
sql: SQL 条件 ;;
}
階層
case |
使用可能なフィールドタイプ
ディメンション許可
SQL の条件と文字列特別なルール
値をアルファベット順に並べ替える場合は、alpha_sort パラメータを使用します。 |
定義
case
を使用すると、ケースロジックを使用して結果をバケット化できます。代わりに未加工の SQL CASE
ステートメントを記述することもできますが、case
を使用すると、Looker UI にユーザー向けのプルダウン メニューが作成されます。SQL の CASE
ステートメントでは、このようなメニューは作成されません。
case
の一般的な形式は次のとおりです。
dimension: status {
case: {
when: {
sql: condition ;;
label: "Label of Condition"
}
# possibly more when statements
else: "Label If No Condition Met"
}
}
これらのパラメータは次のように機能します。
when
- ラベルを使用する各条件を、いくつでもwhen
ステートメントで表現できます。when
ステートメントは、最初にリストされたステートメントから最後のリストにある順に評価され、true と評価された最初のwhen
ステートメントが、関連するラベルを割り当てます。sql
-sql
パラメータは、true または false と評価される SQL 条件を受け入れます。label
- SQL 条件が true の場合、割り当てられるラベルです。割り当てられたラベルのデータ型はstring
です。case
ステートメント内の各label
の値は一意である必要があります。複数の SQL 条件に同じlabel
値を使用する場合は、case
ステートメントの最後の SQL 条件にのみlabel
値が割り当てられます。このページの例をご覧ください。else
- いずれの条件も満たさない場合、これが使用されるラベルです。
full_suggestions
の使用時に、case
ディメンションのビジネス ユーザーに表示される候補は制限されません。case
パラメータで指定したオプションは、すべてのユーザーに表示されます。
alpha_sort
でラベルの並べ替え順序を選択する
通常、case
は記述した順序で表示されます。アルファベット順の並べ替えが必要な場合は、次のように alpha_sort: yes
を使用できます。
dimension: status {
alpha_sort: yes
case: { ... }
}
例
人が読める形式のラベルを複数のステータス番号に割り当てる:
dimension: status {
case: {
when: {
sql: ${TABLE}.status = 0 ;;
label: "pending"
}
when: {
sql: ${TABLE}.status = 1 ;;
label: "complete"
}
when: {
sql: ${TABLE}.status = 2 ;;
label: "returned"
}
else: "unknown"
}
}
同じ条件を繰り返し、異なるラベルに評価する場合、LookML は true と評価される最初の条件を使用します。次の例では、pending
条件が最初に評価されるため、${TABLE}.status = 0
は returned
ではなく pending
と評価されます。
dimension: status {
case: {
when: {
sql: ${TABLE}.status = 0 ;;
label: "pending"
}
when: {
sql: ${TABLE}.status = 1 ;;
label: "complete"
}
when: {
sql: ${TABLE}.status = 0 ;;
label: "returned"
}
else: "unknown"
}
}
複数の条件が同じラベルに評価される場合、LookML は最初の条件のみを使用します。次の例では、Looker は ${TABLE}.status = 2
の代わりに ${TABLE}.status = 0
を使用して、pending
と評価される SQL CASE
ステートメントを生成します。${TABLE}.status = 2
の場合、CASE
ステートメントは unknown
と評価されます。
view: orders
dimension: status {
case: {
when: {
sql: ${TABLE}.status = 0 ;;
label: "pending"
}
when: {
sql: ${TABLE}.status = 1 ;;
label: "complete"
}
when: {
sql: ${TABLE}.status = 2 ;;
label: "pending"
}
else: "unknown"
}
}