LookML の絞り込み

概要

LookML の絞り込みを使用すると、既存のビューまたは Explore を含む 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 では、元のビューファイルにディメンションを追加した場合と同様に、[航空会社] ディメンションが表示されます。

詳細な実装情報については、のセクションをご覧ください。

絞り込みと拡張の比較

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 が適用され、ディメンションが最終的なビューに表示されます。

場合によっては、オーバーライドではなく追加的な絞り込みを行うこともできます。詳しくは、このページの一部のパラメータは追加型のセクションをご覧ください。

一部のパラメータは追加型

絞り込み対象オブジェクトと同じパラメータが絞り込みに含まれる場合、その絞り込みによって絞り込みオブジェクトのパラメータ値が上書きされます

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

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

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

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"
    }
  }
}

また、link パラメータの値が異なる name ディメンションを使用した carriers ビューの絞り込みは以下のとおりになります。


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 ディメンションには両方のリンクが表示されます。

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

オブジェクトを複数の場所で複数回絞り込みすることが可能で、これにより Looker デベロッパーはさまざまなクリエイティブな方法で絞り込みを使用できます。ただしこれは、以下のように、デベロッパーが絞り込みが適用される順序に留意する必要があることも意味します。

  • プロジェクト内では、ファイルが含まれる順序で絞り込みが適用されます。最後に含まれたファイルによる絞り込みは、それ以前に含まれたファイルによる絞り込みよりも優先されます。
  • 1 つのファイル内では、下方向に行単位で絞り込みが適用されます。行番号が最大の絞り込みは最後に適用され、競合がある場合は以前の絞り込みより優先されます。

たとえば、次のビューファイルには、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 の絞り込みが優先されます。

final: yes を使用したさらなる絞り込みの回避

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

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

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 要素が複数の絞り込みで定義されている場合、最後の絞り込みが以前の絞り込みよりも優先されます。詳細については、このページの絞り込みが順番に適用されるをご覧ください。

最後に、絞り込みで使用する extends を実装するために Looker でこれらの原則を組み合わせる方法を理解する必要があります。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]
}

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

  1. オブジェクトで指定された extends の値。orders Explore には extends パラメータがあるため、Looker は拡張対象のオブジェクト(この場合は orders_base Explore)の 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 Refined」になります。

絞り込み 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
  }
}

絞り込みを使用して複数のユースケース用に単一のビューをカスタマイズする例については、DRY LookML でのコードの再利用性の最大化: 複数のユースケースに合わせて単一のベースビューをカスタマイズするのクックブック レシピをご覧ください。

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

前述のとおり、絞り込みは、Looker Blockインポートされたファイルなど、読み取り専用の 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]
  }
}

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

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

たとえば、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 モデルのローカライズのドキュメント ページをご覧ください。