Looker expressions の作成

管理者からテーブル計算を作成する権限が付与されている場合は、次の機能を使用することで、Looker 式を作成せずに一般的な関数をすばやく実行できます。

  • ショートカット計算。Explore のデータ表にある数値フィールドに対して一般的な計算を迅速に実行できます。

管理者からカスタム フィールドを作成する権限が付与されている場合は、Looker 式を作成しなくても、次の機能を使用して一般的な機能をすばやく実行できます。

  • カスタム グループsql パラメータまたは type: case フィールドの CASE WHEN ロジックを開発しなくても、カスタムラベルで値をすばやくグループ化できます。

  • カスタム ビンtype: tier LookML フィールドを開発しなくても、カスタム階層で数値型のディメンションをグループ化できます。

Looker Expressions

Looker 式(LEXP とも呼ばれる)は、以下の計算に使用されます。

Looker 式は、次の要素を組み合わせて構築されています。

  • NULL:NULL は、データが存在しないことを示し、何かが空であるまたは存在しないことを確認したい場合に便利です。

  • 定数: 定数はお客様が指定する不変の値です。7 などの数値または Completed などの文字列は定数です。

  • Looker フィールド: ディメンション、メジャー、表計算などの Looker フィールドへの参照。

  • Looker 演算子: 演算子にはいくつかの種類があります(Looker 関数と演算子のドキュメント ページに記載されています)。

    • 数学演算子(+-*/ など)
    • 比較演算子(=><= など)
    • 論理演算子(ANDORNOT など)
  • Looker 関数: Excel 関数と似た性質のものです。関数を使用すると、複雑な方法でデータの変換や参照を行うことができます。利用可能なすべての関数については、Looker の関数と演算子のドキュメント ページをご覧ください。

Looker expressions の作成

表計算カスタム フィールドカスタム フィルタでは、Looker 式エディタを使用します。式を入力すると、Looker により、使用する関数、演算子、フィールド名が求められます。

便利なヒント: モデルのロジックを検証するためのデータテストを作成する Looker 開発者の場合、Looker 式エディタを使用して Looker 式を作成し、その式をデータテストの expression パラメータにコピーすることもできます。

すべての候補の表示

表計算カスタム フィールド、またはカスタム フィルタを作成して、Explore で Looker 式エディタにアクセスします。

スペースを入力すると、選択できるすべてのフィールド、関数、演算子のリストが表示されます。Explore でフィールドが選択されている場合、Looker はフィールドの左側に黒い円を表示し、リストの上部にそのフィールドを表示します。

入力を開始して、リストを関心のある項目に絞り込みます。

カスタム フィールドの関数と互換性がある場合は、カスタム フィールドのエディタには現在使用中の Explore フィールドが表示されます。

フィールドの追加

式に Looker フィールドを含めるには、フィールド名の入力を開始します。入力すると、検索が入力したものを含むフィールドと関数のリストに絞り込まれます。Explore ページに表示されているフィールド名を入力するか、LookML の名前がわかっている場合はそれを使用できます。

リストからフィールドを選択すると、Looker は ${view_name.field_name} という形式で LookML 名を使用して、式に追加します。これにより、すべてのフィールドに式内の一意の名前を付けることができます。

フィールドの使用方法について詳しくは、このページのフィールドの使用セクションをご覧ください。

合計の追加

合計を表示した Explore に基づいて式を作成する場合は、式に列と行の合計を含めることができます。列の合計は、フィールド名の LookML 反復処理の前に [合計] という単語でエディタに表示されます。たとえば、Count というフィールドの場合、そのフィールドの合計値が Count - Total と表示されます。

合計の LookML 名は ${view_name.field_name:total} という形式です。これはフィールド名の末尾に :total が追加されたものです。行の合計については、エディタのフィールド名の前に [行の合計 という単語が表示され、フィールドの LookML 名では、フィールド名の末尾に :row_total が追加されます。

演算子の追加

必要に応じて、ANDORNOT などの論理演算子を式に追加できます。通常、AND 演算子は OR 演算子の前に評価されますが、かっこを使用することでこの動作をオーバーライドできます。比較演算子(>=<=など)と数学演算子(+* など)も使用できます。

カーソルを演算子の上に置くと、情報ペインの式の右側に、適切に使用するためのメモが表示されます。

演算子の使用方法について詳しくは、このページの演算子の使用セクションをご覧ください。

関数の追加

式に Looker 関数を含めるには、関数の名前の入力を開始します。入力すると、エディタによって、入力したものを含むフィールドと関数のリストに検索が絞り込まれます。

関数は、フィールド、数値、「はい」または「いいえ」など、特定の型を必要とする引数(または変数)で構成される場合があります。カーソルを関数の上に置くと、情報ペインの式の右側に表示されるメモを確認でき、どの引数が必要で、その引数がどの型である必要があるかを理解できます。

Looker が提供している関数の完全なリストは、Looker の関数と演算子のドキュメント ページで参照できます。

関数の使用方法についての詳細は、このページの関数の使用セクションをご覧ください。

エラーヒントと情報ペインの使用

式を入力すると、Looker によって右側に情報ペインが表示されます。このペインには、特に式にエラーがある場合に、ドキュメントと候補が表示されます。

エディタには次の機能があります。

  • エラーのハイライト表示: 式でまだ正しくない箇所に、Looker によって赤で下線が表示されます。

  • 候補とエラーの詳細: 情報ペインの上部には、式に次に追加する項目に関する提案が表示されます。エラーがある場合は、エラーが発生している理由が説明されます。複数のエラーがある場合は、カーソルの位置に応じてエラーが表示されます。

  • ドキュメント: 情報ペインの下部に、カーソルの位置に基づいて操作中の関数または演算子に関するドキュメントが表示されます。たとえば、if() 関数の最初の引数を入力する際、最初の引数は true または false として評価するという情報が提供されます。そのセクションの関数名をクリックすると、その関数のドキュメントに移動できます。

コメントを含める

# でコメント行を開始することで、コメントを Looker 式に含めることができます。

フィールドの使用

フィールドの値(ディメンション、メジャー、表計算)を式で使用する必要がある場合があります。フィールドの値を別の値に追加する、フィールドの値に特定の値があることを確認する、フィールドの値を関数に含めるなど、多くの可能性が考えられます。

上記で説明したとおり、フィールドの名前を式エディタに入力すると、Looker によりフィールドの適切な参照方法を確認できます。式にフィールドを追加すると、Looker ではフィールドの LookML 識別子(${view_name.field_name} など)が使用されます。この識別子は、フィールド ピッカーのフィールド名と必ずしも一致しませんが、フィールドの名前がわからない場合でも問題ありません。フィールド ピッカーに表示されているフィールド名を入力すると、式エディタにフィールド ピッカー名と LookML 識別子が一緒に表示されます。

次のような方法で値を取得できます。

  • 同じ行から値を取得する: フィールドを使用する最も基本的な方法は、フィールドを直接参照することです。たとえば、式で ${product.category} を使用できます。これにより、任意の行について、その行から商品カテゴリを取得することになります。

  • 別の行から値を取得する: 別の行からフィールドの値を取得することもできます。たとえば、「任意の行について、前の行から商品カテゴリを取得する」というロジックが必要だとします。その場合、オフセット関数を使用できます(こちらの位置関数のリストを参照してください)。たとえば、offset(${product.category}, -1)などです。

  • ピボットされた列から値を取得する: ピボットされた列から値を取得することもできます。たとえば、「任意の行について、最初のピボット列から総売上高を取得する」というロジックが必要だとします。ピボット列を操作するには、ピボット関数を使用する必要があります(こちらのピボット関数のリストを参照してください)。たとえば、pivot_index(${order.total_sales}, 1)などです。

  • 行または列から合計を取得する: Explore に合計を追加した場合、${field_name:total} の形式で :total(列の合計)または :row_total(行の合計)をフィールド名に追加することで、列または行から合計値を取得できます。たとえば、注文数の合計に対する割合が必要な場合は、${orders.count} / ${orders.count:total} のような表計算を作成できます。

カスタム フィルタでフィールドを参照する場合は、ディメンションのみを使用できます。メジャー、合計、表計算は使用できません。また、他の行やピボット列の値を参照することもできません。Looker では、データを取得するためにフィルタを SQL に変換できる必要があるためです。

カスタム フィルタまたはカスタム フィールドでは、すべての日時オプションがサポートされているわけではありません。詳細については、ディメンション グループ パラメータの説明をご覧ください。

表計算でフィールドを参照する場合は、任意のディメンション、メジャー、その他の表計算から任意の値を参照できます。

演算子の使用

Looker 式には論理演算子、比較演算子、数学演算子を使用して、さまざまな条件を作成できます。

  • 論理演算子(ANDORNOT など)
  • 比較演算子(>< など)
  • 数学演算子(+- など)

かっこで特に指定しない限り、OR ロジックの前に AND ロジックが考慮されます。次の式では追加のかっこを使用していません。

if (
  ${order_items.days_to_process}>=4 OR
  ${order_items.shipping_time}>5 AND
  ${order_facts.is_first_purchase},
"review", "okay")

これは次のように評価されます。

if (
  ${order_items.days_to_process}>=4 OR
  (${order_items.shipping_time}>5 AND ${order_facts.is_first_purchase}),
"review", "okay")

Looker では、truefalse ではなく yesno を使用する必要があります。これらの論理定数は、引用符で囲まれている "yes""no" という単語と同じではありません。詳細については、論理定数の説明をご覧ください。

関数の使用

Looker の式には多くの場合 1 つ以上の関数が含まれていて、特定のデータの取得や特定の計算に役立ちます。基本的に Excel の関数と類似しています。

関数は、名前に 2 つのかっこが続きます(例: my_function())。このかっこ内に情報をカンマで区切って入力する必要がある場合があります。このような情報を「引数」と呼び、my_function(argument_1, argument_2) のようになります。

たとえば、now 関数は引数を受け取らず、現在の日時を返します。これは now() のような形式です。

round 関数は、数値である引数を 1 つ受け取ります。これは round(3.2) のような形式です。結果は 3 になります。

入力する必要がある引数がある場合に、それを確認するには次の 2 つの方法があります。

  • 式エディタの右側に表示される情報ペインには、記述している関数のドキュメントが表示されます。関数の名前をクリックすると、その関数のドキュメントに移動します。
  • Looker の関数と演算子のドキュメント ページに直接移動して、使用する関数を検索することもできます。

contains 関数について考えてみます。この関数には次のようなドキュメントがあります。

Function 構文 目的
contains contains(string, search_string) stringsearch_string を含む場合は Yes を返し、それ以外の場合は No を返します

2 つの引数が必須であることがわかります。名前は stringsearch_string ですが、関数に「string」と「search_string」という単語を正確に入力する必要はありません。これらは、お客様が何かに置き換える引数の名前です。目的を読むと、string は検索をする対象となるフィールドまたはその他の値であり、search_stringその中で検索したいものであることがわかります。次に例を示します。

contains(${customer.feedback_text}, "great")

顧客からのフィードバックに「great」という単語が含まれる場合、この関数は Yes という結果を返します。それ以外の場合、No という結果が返されます。

関数を他の関数の内部に入れて、複雑なロジックを処理できます。内部関数の結果が外部関数の引数に適している限り、機能します。例:

contains(
  if(
    is_null(${customer.feedback_text}),
    ${customer.comment_text},
    ${customer.feedback_text}
  ),
"great")

ここでは、is_null 関数を、if 関数内にネストしました。そしてこれ自体が contains 関数内にネストされています。これは次のように機能します。

  1. is_null() 関数は、顧客からのフィードバック テキストを確認します。
  2. 次に、if() 関数はその結果を使用し、顧客からのフィードバック テキストがある場合はそれを返し、ない場合は顧客からのコメント テキストを返します。
  3. 最後に、contains() 関数は、if() 関数によって返されたテキストを使用して「great」という単語を検索します。

論理的には、この式は「顧客からのフィードバックがある場合は、その中を検索する。ない場合は、顧客からのコメントの中を代わりに検索する。どちらの場合でも、「great」という単語を探す」という意味になります。

カスタム フィルタカスタム フィールドではほとんどの関数を使用できますが、一部の数学関数、または他の行やピボット列を参照する関数は使用できません。Looker の関数と演算子のドキュメント ページでは、使用できる関数について説明しています。

表計算では任意の関数を使用できます。また、データテストexpression パラメータでは任意の関数を使用できます。expression パラメータは基本的に yesno(ブール値)になる表計算であるためです。