Looker expressions の作成

Looker Expressions

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

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

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

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

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

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

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

Looker expressions の作成

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

すべての候補の表示

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

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

Looker 式エディタで入力を開始して、リストを関心のある項目に絞り込みます。

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

フィールドの追加

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

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

合計の追加

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

合計の LookML 名は ${view_name.field_name:total} という形式です。これはフィールド名の末尾に :total が追加されたものです。

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

演算子の追加

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

演算子にカーソルを合わせると、情報ペインに、適切に使用するためのメモが表示されます。

関数の追加

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

関数は、フィールド、数値、yes/no など、特定の型を必要とする引数(または変数)で構成できます。関数にカーソルを合わせると、情報ペインの式の横に表示されるメモを確認して、指定する必要がある引数と、入力する必要がある引数の型を把握できます。

Looker が提供する関数の完全な一覧については、Looker 関数と演算子のドキュメント ページをご覧ください。

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

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 式には論理演算子、比較演算子、数学演算子を使用して、さまざまな条件を作成できます。

  • 論理演算子(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」という単語を探す」という意味になります。