このページでは、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] }
この例では、orders
Explore を拡張するために、extends
パラメータが transactions
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 されます。