高度な拡張機能のユースケースの例に関するトラブルシューティング

このページでは、LookML の確かな知識を前提とした、より高度なトピックを扱います。

Extends は LookML コードの DRY(don't repeat yourself)を維持できる貴重な LookML 機能です。Looker では、ExploreビューLookML ダッシュボードを、次の例のように、すべてモデルファイル内の extends パラメータを使用して拡張できます。

explore: orders {
  view_name: orders
  join: users {
    type: left_outer
    sql_on: %{orders.user_id} = ${users.id} ;;
    relationship: many_to_one
  }
}

explore: transactions {
  extends: [orders]
}

この例では、transactions Explore の定義内で extends パラメータを使用して、orders Explore を拡張しています。

このページでは、拡張されるオブジェクトをベース オブジェクトと呼び、拡張するオブジェクトは拡張オブジェクトと呼ばれます。

LookML オブジェクトを拡張するプロセスは非常にシンプルです。詳しくは、拡張機能によるコードの再利用のドキュメント ページをご覧ください。ただし、LookML 参照エラーや不要なオブジェクトの重複が発生する可能性がある高度なユースケースもあります。このページでは、別のビューを拡張するビューに基づいて Explore を拡張すると、LookML 参照エラーが発生する例と、そのような問題を解消するためのヒントを示します。

ユースケース: 拡張ビューに基づいて Explore を拡張する

events Explore を拡張し、Explore の拡張がベースとなるビューで、ベース events ビューを拡張するビューのフィールドを使用する場合について考えてみます。この例では、次のサンプル LookML に示されているように、events_extended Explore が extends Explore を拡張しています。

explore: events {
  view_name: events
  join: users {
    type: left_outer
    sql_on: ${events.user_id} = ${users.id} ;;
    relationship: many_to_one
  }
}

explore: events_extended {
  extends: [events]
  join: orders {
    sql_on: ${events_extended.test_id} = ${orders.id} ;;
    relationship: many_to_one
  }

この例では、users ビューはベース events の Explore に結合されており、orders ビューは拡張の Explore(events_extended)に結合されています。ただし、ベース events Explore で定義されている結合は、ベース events ビューのフィールドである events.user_id を参照しています。一方、拡張 events_extended Explore で定義された結合は、フィールド events_extended.test_id を参照します。ここで、events_extended は、events ビューに基づく拡張ビューの名前です。events_extended Explore の定義の結合で参照される test_id フィールドは、拡張 events_extended ビューで次のように定義されます。

include: "events.view.lkml"
view: events_extended {
  extends: [events]

  dimension: test_id {}

events_extended Explore で定義された結合は、拡張ビュー events_extended の名前を参照するため、LookML バリデータは、inaccessible view エラーを返します。

これに対処するには、拡張 Explore の LookML に from パラメータを追加して、その値を拡張ビューの名前 events_extended に設定します。from パラメータは、生成された SQL 内の元のテーブル名に FROM schema.name AS alias という別名をつけます。

これは、Explore レベルで from パラメータを適用する唯一の推奨ユースケースです。

ベース Explore(events)からの結合参照を分割せずに拡張ビュー(events_extended)から pull するには、拡張ビューにマッピングする from パラメータを追加します。

explore: events_extended {
  extends: [events]
  from: events_extended
  join: orders {
    relationship: many_to_one
    sql_on: ${events.test_id} = ${orders.id} ;;
  }
}

この例では、LookML from: events_extended を拡張 Explore の LookML に適用することで、拡張 Explore 内のベースビュー(events)を引き続き参照しながら、その参照を拡張バージョンのビュー(events_extended)から pull するようにリダイレクトします。

from パラメータを使用すると、結合の接頭辞で引き続きベースビュー名 events を参照できますが、これらの参照は、events のすべてのフィールドと新しい test_id を含む拡張ビュー events_extended から pull されます。