LookML の絞り込み

これは、読者が LookML に関する確かな知識を持っていることを前提としています。

概要

LookML の絞り込みを使用すると、LookML ファイルを含む LookML ファイルを編集することなく、既存のビューまたはデータ探索を調整できます。これは次のような場合に適しています。

たとえば、プロジェクト内に次のビューファイルがあるとします。

view: flights {
  sql_table_name: flightstats.accidents ;;

  dimension: id {
    label: "id"
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
}

以下のように flights ビューを改善できます。同じビュー名の view パラメータを使用します。ただし、名前の前にプラス記号(+)を追加して、既存のビューを限定していることを示します。

この絞り込みでは、既存の flights ビューに air_carrier ディメンションが追加されます。

view: +flights {
  dimension: air_carrier {
    type: string
    sql: ${TABLE}.air_carrier ;;
  }
 }

この絞り込みは、モデルファイル、ビューファイル、独自の LookML ファイルなど、プロジェクト内の任意の LookML ファイルに適用できます。仕組みについては、LookML プロジェクトでの絞り込みの使用をご覧ください。

元の LookML と組み合わせた絞り込みは、これがビューに対する元の LookML であるかのような最終結果になります。

view: flights {
  sql_table_name: flightstats.accidents ;;

  dimension: id {
    label: "id"
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }

  dimension: air_carrier {
    type: string
    sql: ${TABLE}.air_carrier ;;
  }
}

Looker UI では、元のビューファイル自体にディメンションを追加した場合と同様に、[Air Carrier] ディメンションが表示されます。

実装について詳しくは、以下の例をご覧ください。

期間延長による絞り込み

Looker は LookML オブジェクトの拡張もサポートしています。拡張は、既存のビューや Explore の新しいコピーを作成して、新しいオブジェクトを追加したい場合に便利です。たとえば、すべてのフィールドを定義するベースビューを作成し、そのベースビューを拡張する複数の新しいビューを作成できます。この新しいビューを変更すると、ベースビュー内の特定のフィールドを非表示にしたり、ベースビューのフィールドの定義やラベルを変更したりできます。

絞り込みは、既存のビューや Explore に変更を加えて、特定のオブジェクトに微調整を加えたり、ビューや Explore のコピーを作成したくない場合に便利です。絞り込みは、基本ビューまたは Explore を変更できない、または変更したくない場合や、新しいビューまたは Explore を作成する際に他の LookML 参照に大規模な変更が必要な場合に適しています。このユースケースの例については、このページのをご覧ください。

ほとんどのユースケースでは、絞り込みは extends に代わるシンプルかつクリーンな代替手段です。

高度な LookML デベロッパーは、LookML の絞り込み内で extends パラメータを使用できます。詳しくは、このページの絞り込み候補に期間延長を含めるをご覧ください。

絞り込みでは、ほとんどのパラメータをオーバーライドできます。

ほとんどの場合、絞り込みは、元の設定よりも優先されます。次の例では、元のビューに隠しディメンション(hidden: yes)が含まれています。

view: faa_flights {
  dimension: carrier {
    hidden: yes
  }
}

別のファイルでは、hidden: no でそのディメンションを絞り込みます。


include: "/views/faa_flights.view.lkml"

view: +faa_flights {
  dimension: carrier {
    hidden: no
  }
}

最後に行われた絞り込みが優先されるため、hidden: no が適用され、このディメンションは最終的なビューに表示されます。

絞り込みは、オーバーライドではなく追加の場合があります。詳細については、このページの一部のパラメータは追加型ですをご覧ください。

一部のパラメータは加算型です

多くの場合、絞り込みに対象となるオブジェクトと同じパラメータが含まれていると、絞り込みは、絞り込みオブジェクトのパラメータ値をオーバーライドします

ただし、一部のパラメータでは絞り込みは追加可能です。つまり、ベース オブジェクトの値は、調整済みオブジェクトの値と組み合わせて使用されます。

次のパラメータは追加型です。

たとえば、name ディメンションと link パラメータを含むビューは次のようになります。

view: carriers {
  sql_table_name: flightstats.carriers ;;

  dimension: name {
    sql: ${TABLE}.name ;;
    type: string
    link: {
      label: "Google {{ value }}"
      url: "http://www.google.com/search?q={{ value }}"
      icon_url: "http://google.com/favicon.ico"
    }
  }
}

ここでは、carriers ビューを絞り込んで、name ディメンションの link パラメータの値を変えています。


include: "/views/carriers.view.lkml"

view: +carriers {
  label: "Refined carriers"

  dimension: name {
    sql: ${TABLE}.name ;;
    type: string
    link: {
      label: "Dashboard for {{ value }}"
      url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
      icon_url: "https://www.looker.com/favicon.ico"
    }
  }
}

洗練された carriers ビューでは、2 つの link パラメータは加法的なため、name ディメンションには両方のリンクがあります。Explore でのディメンションは次のようになります。

絞り込みが順番に適用されます

オブジェクトは、複数回にわたって複数の場所で改良できます。これにより、Looker デベロッパーはさまざまな工夫を凝らして使用することができます。ただし、デベロッパーは絞り込みの適用順序に注意しなければなりません。

  • プロジェクト内では、絞り込みはファイルが含まれる順序で適用されます。前回インクルードしたファイルからの絞り込みは、先にインクルードしたファイルの絞り込みをオーバーライドします。
  • 1 つのファイル内で、絞り込みを行単位で行います。行番号が最も高い絞り込みが最後に適用され、競合がある場合は以前の絞り込みがオーバーライドされます。

final: yes フラグを使用すると、絞り込みが期待どおりに適用されていることを確認できます。詳しくは、final: yes を使用してこれ以上絞り込むことができないをご覧ください。

たとえば、次のビューファイルでは faa_flights ビューの絞り込みが 2 つあります。最初の絞り込みはディメンション(hidden: yes)を非表示にし、2 番目の絞り込みはディメンション(hidden: no)を表示します。この種の競合がある場合、ファイル内の一番下の絞り込みが優先されます。

include: "//e_faa_original/views/faa_flights.view.lkml"

view: +faa_flights {
  dimension: carrier {
    hidden: yes
  }
}

view: +faa_flights {
  dimension: carrier {
    hidden: no
  }
}

ロジックは、プロジェクトに複数のファイルを含める場合と同様です。つまり、インクルードで最後にリストされたファイルの絞り込みが優先されます。たとえば、モデルファイルに次のファイルが含まれているとします。

include: "/refinements/distance_analysis.lkml"
include: "/refinements/finishing_touches.lkml"

distance_analysis.lkml での絞り込みが先に適用され、finishing_touches.lkml ファイルの絞り込みが適用されます。競合がある場合は、最後のファイル(finishing_touches.lkml)の絞り込みが優先されます。

絞り込みではインクルードの順序が利用されるため、絞り込みを使用する場合は、インクルードでワイルドカードを使用しないでください。一般に、ビューにワイルドカードを使用することは避けることをおすすめします。特にプロジェクトに大量のビューファイルがある場合や、プロジェクトで永続的な派生テーブル(PDT)を使用している場合は、このベスト プラクティスをおすすめします。ただし、絞り込みでは、インクルードでワイルドカードを使用することはおすすめしません。

final: yes でこれ以上絞り込むことができない

前述のとおり、同じオブジェクトを複数の場所で複数回絞り込むことができます。最後の絞り込みは、それ以前の絞り込みをすべてオーバーライドします。

絞り込みをビューや Explore の最終絞り込みと見なす場合は、final: yes フラグを絞り込みに追加します。この最終絞り込みの後に適用される調整がすでにある場合、またはデベロッパーがこの絞り込みの後に適用する新しい絞り込みを追加しようとすると、Looker IDE は LookML エラーを返します。たとえば、このビューファイルの 2 つ目の絞り込みには、LookML エラーが発生します。前の絞り込みには final: yes フラグがあるためです。

include: "//e_faa_original/views/faa_flights.view.lkml"

view: +faa_flights {
  final: yes
  dimension: carrier {
    hidden: yes
  }
}

view: +faa_flights {
  dimension: carrier {
    hidden: no
  }
}

final: yes フラグを絞り込みに追加すると、絞り込みが意図したとおりに適用されていることを確認できます。

絞り込みには、

高度な LookML デベロッパーは、LookML の絞り込みで extends パラメータを使用して、調整するオブジェクトに拡張オブジェクトを追加できます。

extends の動作と絞り込みをまとめると、次のようになります。

  • オブジェクトを拡張すると、オブジェクトの新しいコピーが作成され、それを土台として構築されます。たとえば、すべてのフィールドを定義するベースビューを作成し、そのベースビューを拡張する複数の新しいビューを作成できます。新しいビューにはそれぞれベースビューのコピーが組み込まれ、そこからさまざまなフィールド、フィルタ、その他のプロパティを追加してベースビューの内容を変更できます。ベース オブジェクトから始めて、それを複数の他のオブジェクトで使用する方法です。(エクステンションの操作について詳しくは、拡張機能を使用したコードの再利用に関するドキュメントをご覧ください)。
  • オブジェクトを絞り込むと、オブジェクトにさまざまな変更レイヤを追加できますが、拡張と異なり、オブジェクトのコピーは複数作成されません。元の LookML を変更することなく、ベース オブジェクト上にビルドできます。

絞り込みの標準の使用方法の例として、orders という Explore とそれを絞り込む +orders Explore があります。

explore: orders {
  view_name: orders
  # other Explore parameters
}

explore: +orders {
  label: "Orders Information"
  # other Explore parameters to build on the original Explore
}

これに加えて、extends を含む絞り込みを追加できます。この例をベースとして、同じ orders Explore を示します。さらに、users_base という基本の Explore もあり、+orders 絞り込みに、users_base を取り込む extends パラメータが追加されました。


explore: users_base {
  view_name: users
  extension: required
  # other Explore parameters
}

explore: orders {
  view_name: orders
  # other Explore parameters
}

explore: +orders {
  label: "Orders Information"
  extends: [users_base]
  # other Explore parameters to build on the original Explore
}

ここでの特別なことは、+orders 絞り込みに extends が含まれていることです。その結果、+orders ビューにより users_base Explore が拡張されます。

Looker が絞り込みに extends を実装する方法

絞り込み内でオブジェクトを拡張することは、LookML の高度なコンセプトです。絞り込みで extends を使用する前に、次の点について十分に理解しておく必要があります。

  • Looker による extends の実装方法: 拡張オブジェクトと拡張オブジェクトの両方で LookML 要素を定義する場合、パラメータが追加である場合を除き、拡張オブジェクトのバージョンが使用されます。詳細については、拡張によるコードの再利用に関するドキュメントをご覧ください。
  • Looker での絞り込みの実装方法: LookML 要素が複数の絞り込みで定義されている場合、最後の絞り込みは以前の絞り込みをオーバーライドします。詳しくは、このページの絞り込みが順番に適用されるをご覧ください。

最後に、Looker がこれらの原則を組み合わせて、絞り込みで使用する extends を実装する方法を理解しました。Looker で実装する順序は以下のとおりです。競合が発生した場合、各ステップが前のステップよりも優先されます。

  1. オブジェクトで指定された extends の値
  2. オブジェクトの絞り込みで指定された extends の値
  3. オブジェクトの値
  4. オブジェクトの絞り込みの値

以下に、実装の各ステップで label パラメータの値を使用する例を示します。

explore: orders_base {
  label: "Orders Base"
  view_name: orders
  extension: required
}

explore: users_base {
  label: "Users Base"
  view_name: users
  extension: required
}

explore: orders {
  label: "Orders"
  extends: [orders_base]
}

explore: +orders {
  label: "Orders Refined"
  extends: [users_base]
}

この例の orders Explore で、Looker は label の値を実装します。

  1. オブジェクトで指定された extends の値。orders Explore には extends パラメータがあるため、Looker は拡張されているオブジェクト(この場合は orders_base)の LookML 要素から開始します。この時点で、label の値は「Orders Base」です。
  2. オブジェクトの絞り込みで指定された extends の値。orders には絞り込みがあり、絞り込みには extends パラメータがあるため、Looker は絞り込み拡張機能(この場合は users_base Explore)の LookML 要素を適用します。この時点で、label の値は「Users Base」です。
  3. オブジェクトの値。すべての拡張機能が解決されたので、Looker は拡張オブジェクト(この場合は orders Explore)の要素を適用します。競合がある場合は、拡張オブジェクトが優先されます。したがって、label の値は「Orders」になります。
  4. オブジェクトの絞り込みの値。最後に、Looker では orders Explore の絞り込みから要素を適用します。競合がある場合は、絞り込みオブジェクトが優先されます。ここで、label の値は &Orders の「注文の絞り込み」となります。

絞り込み extends は追加的

通常、このページの絞り込みのオーバーライド パラメータのセクションで説明したように、絞り込みはオブジェクトの元の設定をオーバーライドします。extends パラメータは例外です。extends を絞り込みで使用する場合、extends パラメータの値は、元のオブジェクトまたは以前の絞り込みで拡張されているアイテムのリストに追加されます。競合する場合、一連のチェーン内で最後の項目が優先されます。

たとえば、orders_base という基本 Explore と、ベースを拡張する orders Explore があります。さらに、users_base Explore と、users_base を拡張する +orders の絞り込みがあります。

explore: orders_base {
  view_name: orders
  extension: required
  # other Explore parameters
}

explore: users_base {
  view_name: users
  extension: required
  # other Explore parameters
}

explore: orders {
  extends: [orders_base]
  # other Explore parameters to build on the base Explore
}

explore: +orders {
  extends: [users_base]
  # other Explore parameters to build on the base Explores
}

orders Explore は orders_base を拡張し、+orders の絞り込みによって users_baseextends リストに追加します。その結果、+orders Explore では、Explore の元の LookML であるかのように orders_baseusers_base の両方が拡張されます。

explore: orders {
  extends: [orders_base, users_base]
}

競合する場合、一連のチェーン内で最後の項目が優先されます。この例では、users_base 内の要素は orders_base 内の競合する要素をオーバーライドします。

一度に複数のオブジェクトを拡張するというコンセプトについては、拡張によるコードの再使用に関するドキュメントで説明します。

最後に覚えておいてください。この例では、explore パラメータの順序は重要ではありません。ただし、同じオブジェクトの複数の絞り込みを行う場合は、絞り込みの順序が重要です。このページの絞り込みが順番に適用されるセクションの説明にあるように、ファイルでの最後の絞り込みは、古い絞り込みよりも優先されます。

LookML プロジェクトでの絞り込みの使用

以下に、プロジェクトのビューと Explore を絞り込むための大まかな手順を示します。

  1. 改良するビューまたは Explore を特定します。
  2. 絞り込みの保管場所を決定します。既存の LookML ファイルに絞り込みを追加したり、絞り込み用に別の LookML ファイルを作成したりできます。(汎用的な LookML ファイルの作成例については、他のプロジェクト ファイルについてのドキュメント ページにあるデータテスト ファイルの作成の手順をご覧ください)。
  3. include パラメータを使用して、絞り込みをモデルに組み込みます。
    • 絞り込みを書き込むファイルには、絞り込みの対象となる LookML のファイルを含める必要があります。Looker IDE では、含まれていないオブジェクトを調整しようとすると警告が表示されます。
    • モデルファイルには、絞り込みを定義するファイルを含めます。ファイルを組み合わせてインクルードをクリエイティブな方法で使用することができます。詳しくは、このページの絞り込みを使用してモデルにレイヤを追加するをご覧ください。

LookML オブジェクトの調整は、元の LookML を編集しなくてもビューと Explore を簡単に適応させるための方法です。特に、他のプロジェクトからインポートされたファイルなど、ビューと Explore が読み取り専用になる場合に便利です。これは Explore の絞り込みの例です。

aircraft Explore 用の LookML を次に示します。


explore: aircraft {
  join: aircraft_types {
    type: left_outer
    sql_on: ${aircraft.id} = ${aircraft_types.id} ;;
    relationship: many_to_one
  }

  join: aircraft_engine_types {
    type: left_outer
    sql_on: ${aircraft.id} = ${aircraft_engine_types.id} ;;
    relationship: many_to_one
  }
}

この Explore には複数のビューがあり、各ビューには多くのディメンションがあります。

これで、e_faa_refined という別の LookML プロジェクトが aircraft Explore ファイルをインポートするようになりました。e_faa_refined プロジェクトでは、絞り込みを使用して aircraft Explore を劇的に簡素化できます。

aircraft Explore はインポートされたファイルであるため、直接編集することはできません。代わりに、絞り込みを追加することができます。この LookML を含む refinements.lkml という名前の別のファイルの例を次に示します。

include: "//e_faa_original/Explores/aircraft.explore.lkml"

explore: +aircraft {
  label: "Aircraft Simplified"
  fields: [aircraft.aircraft_serial, aircraft.name, aircraft.count]
}

refinements.lkml ファイルには次のものが含まれます。

  • インポートしたプロジェクトから元の aircraft.explore.lkml ファイルを受け取る include パラメータ(インポートしたプロジェクト ファイルを参照する方法については、他のプロジェクトからファイルをインポートするに関するドキュメントをご覧ください)
  • aircraft Explore の絞り込み:
    • Explore 名の前にある + 記号は、既存の Explore を絞り込むことを意味します。
    • label パラメータは、Explore のラベルを「Aircraft Simplified」に変更します。
    • fields パラメータは、Explore に 3 つのフィールドのみを表示するように指定します。

最終的には、これが元の aircraft Explore と aircraft ビューになります。

explore: aircraft {
  label: "Aircraft Simplified"
  }

view: aircraft {
  sql_table_name: flightstats.aircraft ;;

  dimension: aircraft_serial {
    type: string
    sql: ${TABLE}.aircraft_serial ;;
  }

  dimension: name {
    type: string
    sql: ${TABLE}.name ;;
  }

  measure: count {
    type: count
  }
}

絞り込みのその他のユースケース

前述のように、絞り込みは、Looker Blocksインポートされたファイルなど、読み取り専用の LookML オブジェクトを適用する際に理想的です。

ただし、絞り込みを追加してモデルに組み込むことに慣れたら、次の例で説明するように、プロジェクトで非常にクールなことを行うことができます。

絞り込みを使用した分析の追加

絞り込みを使用することで、元の LookML ファイルに影響を与えることなくモデルに分析を追加することができます。たとえば、ビューと Explore がデータベースのテーブルから生成され、faa_basic.lkml という LookML ファイルに保存されているプロジェクトがある場合、絞り込みを使用して分析を追加する faa_analysis.lkml ファイルを作成できます。距離分析を含む distance_stats という新しい派生テーブルの例を次に示します。この例は、distance_stats 派生テーブルを flights Explore に結合する faa_basic.lkml ファイルから既存の flights Explore を絞り込む方法を示しています。また、この例の一番下にある既存の flights ビューを改良し、分析から新しいフィールドを追加しています。

include: "faa_basic.lkml"

explore: +flights {
  join: distance_stats {
    relationship: one_to_one
    type: cross
  }
}

view: distance_stats {
  derived_table: {
    explore_source: flights {
      bind_all_filters: yes
      column: distance_avg {field:flights.distance_avg}
      column: distance_stddev {field:flights.distance_stddev}
    }
  }
  dimension: avg {
    type:number
    sql: CAST(${TABLE}.distance_avg as INT64) ;;
  }
  dimension: stddev {
    type:number
    sql: CAST(${TABLE}.distance_stddev as INT64) ;;
  }
}
view: +flights {
  measure: distance_avg {
    type: average
    sql: ${distance} ;;
  }
  measure: distance_stddev {
    type: number
    sql: STDDEV(${distance}) ;;
  }
  dimension: distance_tiered2 {
    type: tier
    sql: ${distance} ;;
    tiers: [500,1300]
  }
}

絞り込みを使用してモデルにレイヤを追加する

絞り込みのもう一つの興味深いユースケースは、プロジェクトにレイヤを追加することです。複数の絞り込みファイルを作成して、戦略的に組み込んでレイヤを追加できます。

たとえば、FAA プロジェクトには、データベースのテーブルから生成されたすべてのビューと Explore を含む faa_raw.lkml ファイルがあります。このファイルには、データベース内のすべてのテーブルを表示するビューが用意されており、データベース テーブルごとにディメンションが表示されます。

未加工ファイルに加えて、以下のように faa_basic.lkml ファイルを作成して、Explore への結合の追加やビューへのメジャーの追加など、基本的な絞り込みで新しいレイヤを追加できます。

include: "faa_raw.lkml"

explore: +flights {
  join: carriers {
    sql_on: ${flights.carrier} = ${carriers.name} ;;
  }
}

view: +flights {
  measure: total_seats {
    type: sum
    sql: ${aircraft_models.seats} ;;
  }
}

次に、faa_analysis.layer.lkml ファイルを追加して、分析を含む新しいレイヤを追加します(分析ファイルの例については、絞り込みを使用した分析の追加のサブセクションをご覧ください)。

あとは、すべての絞り込みファイルをモデルファイルに含めるだけです。モデルファイルを使用して、参照するデータベース テーブルのビューを指す絞り込みを追加することもできます。

connection: "publicdata_standard_sql"

include: "faa_raw.lkml"
include: "faa_basic.lkml"
include: "faa_analysis.lkml"

view: +flights {
  sql_table_name: lookerdata.faa.flights;;
}
view: +airports {
  sql_table_name: lookerdata.faa.airports;;
}
view: +aircraft {
  sql_table_name: lookerdata.faa.aircraft;;
}
view: +aircraft_models{
  sql_table_name: lookerdata.faa.aircraft_models;;
}
view: +carriers {
  sql_table_name: lookerdata.faa.carriers;;
}

このモデルファイルを複製して、別のデータベース テーブルを指定できます。また、モデルに必要なその他のレイヤを定義するために作成した、複数の絞り込みファイルを含めることもできます。

PDT の絞り込みの使用

このページの拡張との調整のセクションで説明したように、拡張機能は、拡張されているオブジェクトの新しいコピーを作成します。永続的な派生テーブル(PDT)の場合は、拡張機能を使用しないでください。PDT の各拡張機能により、データベース内のテーブルの新しいコピーが作成されるためです。

ただし、PDT のビューには絞り込みを追加できます。絞り込みでは、絞り込み対象のオブジェクトの新しいコピーは作成されません。

メタデータを使用してオブジェクトの絞り込みを確認する

Looker IDE で explore パラメータまたは view パラメータをクリックすると、メタデータ パネルでオブジェクトの絞り込みを確認できます。詳細については、LookML オブジェクトのメタデータに関するドキュメントをご覧ください。

留意事項

ローカライズが必要なプロジェクト

オブジェクトを絞り込むときは、ローカライズ ルールが絞り込みにも適用されることに注意してください。オブジェクトの調整を行って新しいラベルや説明を定義する場合は、プロジェクトのロケール文字列ファイルでローカライズ定義を指定します。詳細については、LookML モデルのローカライズのドキュメントをご覧ください。