Looker Block をカスタマイズする
このページでは、次の Cortex Framework Looker Block を特定のビジネス要件に合わせて調整する方法に関するベスト プラクティスと例の概要について説明します。
インストール
Cortex Framework Looker Block は、 Looker Block をデプロイするドキュメント で説明されているように、いくつかの方法でインストールできます。ただし、ビジネスニーズに合わせてブロックをカスタマイズする最も簡単な方法として、リポジトリをフォークする ことをおすすめします。
Cortex Framework Looker Block は、各レイヤが前のレイヤにロジックの増分を追加する階層型アプローチで作成されています。
- ベースレイヤ: ソーステーブルを参照するマシン生成の LookML ビュー。
- コアレイヤ: 新しいフィールドを追加したり、 ベースレイヤのフィールドを変更したりする手書きの変更。
- 論理レイヤ: さまざまなビューにわたる Explore の定義と結合。
この階層型 アプローチとカスタマイズの鍵となるのは、絞り込みの使用です。また、DRY(Don't Repeat Yourself)の原則に従うために、extends とconstantsが活用されます。ラベル、SQL ステートメント、html、リンク プロパティの動的コンテンツは、 Liquid テンプレート作成言語を使用して生成されます。
Google の一般的なベスト プラクティス:
ファイルとフォルダの構成
Looker Block 内では、各フォルダはオブジェクト タイプ(ビュー、Explore、ダッシュボードなど)のコレクションを表します。個々のオブジェクトは、別々のファイルで定義されます。プロジェクト ルートには、次のキーファイルが含まれています。
.modelファイル- マニフェスト ファイル
- README ファイルとその他の Markdown ファイル
- Marketplace ファイル(ブロックが Looker Marketplace でも利用可能な場合)

モデル
モジュール式のファイル管理により、プロジェクトの model ファイルは次のパラメータでスリム化されます。
- 乗り継ぎ
-
含まれるファイルの種類は次のとおりです。
- コンポーネント(データグループ、関連する場合は
named_value_formats) - Explore(Explore はモデルファイルで定義されていません)
- ダッシュボード
- コンポーネント(データグループ、関連する場合は
Block で使用されるビューの include ステートメントは、次の例に示すように、この場所ではなく、個々の Explore ファイル内で定義されます。
connection: "@{CONNECTION_NAME}"
include: "/components/**/*.lkml"
include: "/explores/**/*.explore"
include: "/dashboards/**/*.dashboard"
マニフェスト
マニフェスト ファイルでは、プロジェクト全体で参照される定数を指定します。ブロックに使用される定数の例を次に示します。
- 接続名
- プロジェクト ID
- レポート データセット
Cortex Framework Looker Block では、定数を使用して次のものも定義します。
- ラベルを表示
- 項目のラベル
- HTML 形式
- URL リンク
- ダッシュボード名
Looker Block に定義されている定数を確認し、必要に応じて値を変更します。変更は、定数が参照されているすべての場所に適用されます。
ユーザー属性
一部の Looker Block では、 ユーザー属性を管理者が Looker インスタンスで定義する必要があります。デフォルトの言語や通貨のユーザー属性を使用すると、ユーザーまたはグループごとにダッシュボードの表示方法をカスタマイズできます。必要なユーザー属性について詳しくは、各ブロックの 概要 をご覧ください。
ビュー
[Base] フォルダにあるビューは、テーブルからビューを作成を使用して自動的に生成されたものです。これらのファイルは最小限に変更されています。
- プロジェクト ID とデータセット名を定数に置き換えました。
- ネストされたレコードに基づくビューを別のファイルに移動しました。
- 不要なドリル フィールドの定義を削除しました。
ラベル、新しいディメンション、 メジャーなど、これらのビューに対する大幅な変更は、絞り込み、extends、派生テーブルを使用して [Core] フォルダに作成されています。
コアフォルダ内では、ビューに接尾辞が付いており、ビューのタイプを示しています。
- 絞り込みの場合は
_rfn。 - 拡張が必要なビューの場合は
_ext。 - SQL ベースの派生テーブルの場合は
_sdt。 - ネイティブ派生テーブルの場合は
_ndt。 - 永続的な派生テーブルの場合は
_pdt。 - 複数のビューのフィールドを参照するビューの場合は
_xvw。

各ビュー定義は、説明、ソース、参照、拡張フィールド、その他の関連するメモなど、背景情報を提供するアノテーションで始まります。

ネストされた繰り返しレコード
ネストされた繰り返しレコードを含む基盤となるテーブルの場合、Looker はこれらのレコードをネスト解除するための個別のビューを作成します。たとえば、Oracle EBS Looker Block では、sales_orders テーブルに lines という名前のネストされた繰り返し構造体があります。Looker は、これらを 2 つの異なる
ビューとして扱います: sales_orders と sales_orders__lines。
Explore 内でこれらのネスト解除されたレコードを結合するには、UNNEST コマンドと組み合わせて sql プロパティを使用して結合を定義する必要があります。

詳細については、Looker でネストされた BigQuery データをモデリングする方法をご覧ください。
Looker Block コードの操作と理解
Cortex Framework Looker Block には、ビューやその他のオブジェクトに多くのコメントが含まれています。コードの操作と理解を容易にするため、LookML 開発環境で使用できる [Fold LookML] オプションを使用することをおすすめします。



フィールド
field という用語は、dimension、measure、filter、parameter などのオブジェクトを指します。これらの新しいブロックでは、次の原則に従いました。
- ディメンションの名前はsnake_case (小文字で単語間にアンダースコア)で付けます。例:
customer_name。 - 基盤となるテーブルの列名は、ディメンションの名前として使用されます。ラベルをディメンションに適用して、ビジネスに適した名前を付けることができます。
たとえば、
division_hdr_spartという名前のディメンションに「Division ID」というラベルを付けることができます。 - 列数の多いテーブルの場合、フィールドはデフォルトで非表示になっています。ビューの絞り込みを使用して、Explore に表示するフィールドのサブセットの
hiddenプロパティを「no」に設定します。フィールドが想定どおりに表示されない場合は、このフィールド プロパティを編集することで問題を解決できます。 View_labelプロパティとgroup_labelプロパティは、必要に応じて Explore 内のフィールドを整理するために使用されます。- 複数のビューで使用されるフィールドの場合、ラベルなどのプロパティは「共通」ビュー内で確立され、その後他のビューに拡張されます。このアプローチでは、プロパティの定義を一元化し、再利用性を高めます。必要な変更は「共通」ビュー内で管理され、「共通」ビューが拡張されているすべてのビューに変更が反映されます。
- 複数の Explore で使用されるパラメータや、複数のビューを参照するフィールドは、
_xvw接尾辞が付いたフィールドのみのビューで定義されます。詳細については、Explore 間で不整合が発生しないようにするをご覧ください。
編集例
このセクションでは、一般的なカスタマイズの例を示します。
フィールドの非表示を解除する
ベースビューには、基盤となるテーブルのすべてのディメンションが含まれます。ほとんどのディメンションを表示する必要がない場合は、絞り込みを使用してすべてのフィールドをデフォルトで非表示にします。これは、fields_hidden_by_default プロパティを「yes」に設定することで実現できます。含まれている LookML ダッシュボードに関連するフィールドのサブセットは非表示にされていません。次の例では、item_posnr というディメンションを持つ sales_orders という名前のベースビューを想定しています。
view: sales_order {
sql_table_name: reporting.sales_order ;;
dimension: item_posnr {
type: string
sql: ${TABLE}.Item_POSNR
}
}
このビューの絞り込みは、_rfn 接尾辞が付いたファイルで定義されています。絞り込みでは、ビュー プロパティ fields_hidden_by_default が「yes」に設定されます。つまり、すべてのフィールドが最初は非表示になります。ビューにフィールド item_posnr を表示するには、hidden プロパティを「no」に設定します。
view: +sales_order {
fields_hidden_by_default: yes
dimension: item_posnr {
hidden: no
}
}
パラメータ ビューのラベルを変更する
一部の Looker Block では、スタンドアロン ファイルで定義された共有パラメータ セットを使用します。たとえば、Oracle EBS Block では otc_common_parameters_xvw ファイルを使用します。このビューには「🔍 Filters」というラベルが表示されます。これは、マニフェスト ファイル内で定数として定義されています。
このラベルを変更するには:
- マニフェスト ファイルで
label_view_for_filters定数を見つけます。 - 定数の値を任意のラベルに編集します。
- マニフェスト ファイルを保存します。
変更は、
label_view_for_filters定数が参照されているすべての場所に自動的に反映されます。
Manifest
constant: label_view_for_filters {
value: "My Filters"
}
または、ビュー otc_common_parameters_xvw に移動し、「label」プロパティを任意の値に編集します。
view: otc_common_parameters_xvw {
label: "My Filters"
}
新しいメジャーを追加する
新しいメジャーは、関連する絞り込みに直接追加できます。次の例は、販売注文の絞り込みに追加された新しいメジャーを示しています。
view: +sales_orders {
measure: customer_count {
type: count_distinct
sql: ${customer_id}
}
}
2 つ目の絞り込みレイヤを追加する
新しい絞り込みは、既存の絞り込みに基づいて構築できます。次の例のように、ファイル sales_orders_rfn.view で sales_orders の絞り込みを検討します。これにより、
メジャー average_sales が作成されます。
include: "/views/base/sales_orders"
view: +sales_orders {
measure: average_sales {
type: average
sql: ${order_value}
}
}
2 つ目の絞り込みファイルを作成するには:
- 新しい絞り込みファイルを作成する:
sales_orders_rfn2.viewという名前を付けます。 - 最初の絞り込みファイルを含める: これにより、すべての定義が
sales_orders_rfnからsales_orders_rfn2に組み込まれます。 - ラベル プロパティを編集する:
labelプロパティをaverage_sales「average spend」または任意のラベルに変更します。 新しいディメンションを追加する: 新しいディメンションのコードを
sales_orders_rfn2.viewファイルに含めます。include: "/views/core/sales_orders_rfn.view" view: +sales_orders { measure: average_sales { label: "Average Spend" } dimension: customer_name_with_id { type: string sql: CONCAT(${customer_id},' ',${customer_name}) } }Explore に 2 つ目の絞り込みファイルを含める: これにより、 のすべての定義と機能強化が Explore に組み込まれます。
sales_orders_rfn2include: "/views/core/sales_orders_rfn2.view" explore: sales_orders { }
新しい絞り込みレイヤを作成する
Cortex Framework Looker Block 内で定義されているベースビューの絞り込みは、特定の要件を満たしていない場合に置き換えることができます。_rfn ファイルを直接編集して、不要なフィールド定義を削除したり、新しいフィールド定義を追加したりできます。
または、新しい絞り込みファイルを作成します。
- 新しい絞り込みファイルを作成する:
sales_invoices_rfnという名前を付けて保存します。 - ベースビューを含める: これにより、
ベースビュー
sales_invoicesのすべての定義がsales_invoices_rfnに組み込まれます。 選択したカスタマイズを追加する: ディメンションを 主キーとして定義してください。
include: "/views/base/sales_invoices.view" view: +sales_invoices { fields_hidden_by_default: yes dimension: invoice_id { hidden: no primary_key: yes value_format_name: id } dimension: business_unit_name { hidden: no sql: CONCAT(${business_unit_id}, ":",${TABLE}.BUSINESS_UNIT_NAME) ;; } }Explore に新しい絞り込みを含める: Cortex Framework Looker Block で提供される絞り込みの代わりに、
includeプロパティで新しいファイルを使用します。include: "/views/my_customizations/sales_invoices_rfn.view" explore: sales_invoices { }
LookML ダッシュボード フィルタを編集する
複数の LookML ダッシュボードで使用されるダッシュボード フィルタの共通セットは、_template 接尾辞が付いた名前のダッシュボードで定義され、各ダッシュボードに拡張されます。拡張すると、特定のダッシュボードに必要なフィルタ オブジェクトを変更できます。
すべてのダッシュボードを編集する
すべてのダッシュボードのフィルタタイプを変更するには、フィルタを定義するテンプレート ファイルを見つけます。ui_config のタイプと表示プロパティを任意の構成に編集します。この変更は、テンプレートを拡張するすべてのダッシュボードに適用されます。以下に otc_template.dashboard の例を示します。
- dashboard: otc_template
extension: required
filters:
- name: customer_country
title: "Sold to Customer: Country"
type: field_filter
default_value: ''
allow_multiple_values: true
required: false
ui_config:
type: dropdown_menu
display: popover
explore: countries_md
field: countries_md.country_name_landx
特定のダッシュボードを編集する
特定のダッシュボードのフィルタを変更するには、ダッシュボード ファイルを見つけて、変更が必要な select プロパティとともにフィルタ名を含めます。この変更は、単一のダッシュボードに限定されます。たとえば、otc_order_status.dashboard の customer_country フィルタのタイトル、UI タイプ、表示を変更する場合、これらのプロパティのみがダッシュボード ファイルに含まれます。残りのプロパティは、拡張されたテンプレートから継承されます。
- dashboard: otc_order_status
title: Order Status
extends: otc_template
filters:
- name: customer_country
title: "Customer Country"
ui_config:
type: dropdown_menu
display: inline
LookML ダッシュボードの作成と変更について詳しくは、 LookML ダッシュボードの構築をご覧ください。