Looker Blocks をカスタマイズする
このページでは、次の Cortex Framework Looker ブロックを特定のビジネス要件に合わせて調整する方法に関するベスト プラクティスと例の概要について説明します。
インストール
Cortex Framework Looker Blocks は、Looker Blocks をデプロイするドキュメントに記載されているように、いくつかの方法でインストールできます。ただし、ブロックをビジネスニーズに合わせてカスタマイズする最も簡単な方法は、リポジトリをフォークすることです。
Cortex Framework Looker ブロックは、各レイヤが前のレイヤに増分ロジックを追加する階層型のアプローチで作成されています。
- ベースレイヤ: ソーステーブルを参照する機械生成の LookML ビュー。
- コアレイヤ: 手書きによる変更(新しいフィールドの追加やベースレイヤ フィールドの変更)。
- 論理レイヤ: さまざまなビューの定義と結合を探索します。
この階層型のアプローチとカスタマイズでは、絞り込みの使用が重要です。また、DRY(Don't Repeat Yourself)の原則に従うため、extends と定数が活用されています。ラベル、SQL ステートメント、html、リンク プロパティの動的コンテンツは、Liquid テンプレート作成言語を使用して生成されます。
Google の一般的なベスト プラクティス:
ファイルとフォルダの整理
Looker Block 内の各フォルダは、オブジェクト タイプ(ビュー、Explore、ダッシュボードなど)のコレクションを表します。各オブジェクトは個別のファイルで定義されます。プロジェクトのルートには、次のキーファイルが含まれています。
.model
ファイル- マニフェスト ファイル
- README などのマークダウン ファイル
- Marketplace ファイル(ブロックが Looker Marketplace でも利用可能な場合)
モデル
モジュラー ファイル管理では、次のパラメータを使用してプロジェクトの model
ファイルをスリム化します。
- 乗り継ぎ
-
含まれるファイルの種類は次のとおりです。
- コンポーネント(データグループ、関連する場合は
named_value_formats
) - Explore(Explore はモデルファイルで定義されません)
- ダッシュボード
- コンポーネント(データグループ、関連する場合は
ブロックで使用されるビューの include
ステートメントは、次の例に示すように、この場所ではなく、個々の Explore ファイル内で定義されます。
connection: "@{CONNECTION_NAME}"
include: "/components/**/*.lkml"
include: "/explores/**/*.explore"
include: "/dashboards/**/*.dashboard"
マニフェスト
マニフェスト ファイルには、プロジェクト全体で参照される定数が指定されます。ブロックで使用される定数の例を次に示します。
- 接続名
- プロジェクト ID
- レポート データセット
Cortex Framework Looker ブロックでも、定数を使用して次のことを定義します。
- ラベルを表示
- 項目のラベル
- HTML 形式
- URLリンク
- ダッシュボード名
Looker ブロックに定義されている定数を確認し、必要に応じて値を変更します。変更は、定数が参照されているすべての場所に適用されます。
ユーザー属性
Looker Block によっては、管理者が Looker インスタンスでユーザー属性を定義する必要があります。デフォルトの言語や通貨のユーザー属性を使用すると、ユーザーまたはグループごとにダッシュボードの表示方法をカスタマイズできます。必要なユーザー属性の詳細については、各ブロックの概要をご覧ください。
ビュー
[Base] フォルダにあるビューは、[テーブルからビューを作成] を使用して自動生成されたビューです。以下のファイルは最小限に変更されています。
- プロジェクト ID とデータセット名を定数に置き換えました。
- ネストされたレコードに基づくビューを別のファイルに移動しました。
- 不要なドリルダウン フィールドの定義を削除しました。
ラベル、新しいディメンション、メジャーなど、これらのビューの大幅な変更は、絞り込み、拡張、派生テーブルを使用して Core フォルダに作成されています。
コアフォルダ内のビューには、ビューの種類を示す接尾辞が付けられます。
_rfn
: 絞り込み。_ext
: 拡張を必要とするビュー。- SQL ベースの派生テーブルの場合は
_sdt
。 - ネイティブ派生テーブルの場合は
_ndt
。 - 永続的な派生テーブルの場合は
_pdt
。 _xvw
: 複数のビューのフィールドを参照するビュー。
各ビュー定義は、説明、ソース、参照、拡張フィールド、その他の関連するメモなど、背景情報を提供するアノテーションで始まります。
ネストされた繰り返しレコード
ネストされた繰り返しレコードを含む基盤となるテーブルの場合、Looker はこれらのレコードのネストを解除する個別のビューを作成します。たとえば、Oracle EBS Looker ブロックの sales_orders
テーブルには、lines
という名前のネストされた繰り返し構造体があります。Looker では、これらは sales_orders
と sales_orders__lines
の 2 つの異なるビューとして扱われます。
ネストされていないこれらのレコードを Explore 内で結合するには、UNNEST コマンドと組み合わせて sql
プロパティを使用して結合を定義する必要があります。
詳細については、Looker でネストされた BigQuery データをモデル化する方法をご覧ください。
Looker Block コードのナビゲーションと理解
Cortex Framework Looker ブロックには、ビューやその他のオブジェクトに詳細なコメントが含まれています。コードのナビゲーションと理解を強化するには、LookML 開発環境で利用可能な Fold LookML オプションを使用することをおすすめします。
フィールド
field
という用語は、dimension
、measure
、filter
、parameter
などのオブジェクトを指します。これらの新しいブロックでは、次の原則に従いました。
- ディメンションの名前は、snake_case(小文字で単語をアンダースコアで区切る)で指定します。例:
customer_name
。 - ディメンションの名前には、基になるテーブルの列名が使用されます。ディメンションにラベルを適用して、ビジネスに適した名前を付けることができます。たとえば、
division_hdr_spart
という名前のディメンションには「部門 ID」というラベルが付けられます。 - 列の多いテーブルでは、デフォルトでフィールドが非表示になります。ビューの絞り込みを使用して、Explore に表示するフィールドのサブセットの
hidden
プロパティを「no」に設定します。フィールドが想定どおりに表示されない場合は、このフィールド プロパティを編集することで問題を解決できます。 View_label
プロパティとgroup_label
プロパティは、必要に応じて Explore 内のフィールドを整理するために使用されます。- 複数のビューで使用されるフィールドの場合、ラベルなどのプロパティは「共通」ビュー内に設定され、その後他のビューに拡張されます。このアプローチでは、プロパティの定義を一元化し、再利用を促進します。必要な変更は「共通」ビュー内で管理され、「共通」ビューが拡張されているすべてのビューに変更が反映されます。
- 複数の Explore で使用されるパラメータや、複数のビューを参照するフィールドは、
_xvw
接尾辞を持つフィールド専用ビューで定義されます。詳細については、データ探索間での不整合を回避するをご覧ください。
編集の例
このセクションでは、一般的なカスタマイズの例を示します。
フィールドの非表示を解除する
ベースビューには、基になるテーブルのすべてのディメンションが含まれます。ほとんどのディメンションを表示する必要がない場合は、絞り込みを使用して、デフォルトですべてのフィールドを非表示にします。これを行うには、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 ブロックは otc_common_parameters_xvw
ファイルを使用します。このビューには、マニフェスト ファイル内で定数として定義されている「🔍 フィルタ」というラベルが表示されます。
このラベルを変更するには:
- マニフェスト ファイルで
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
に組み込まれます。 - ラベル プロパティを編集する:
average_sales
のlabel
プロパティを「平均費用」または任意のラベルに変更します。 新しいディメンションを追加する:
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 番目の絞り込みファイルを含める: これにより、
sales_orders_rfn2
のすべての定義と拡張機能が Explore に組み込まれます。include: "/views/core/sales_orders_rfn2.view" explore: sales_orders { }
新しい調整レイヤを作成する
Cortex Framework Looker ブロック内で定義されたベースビューの絞り込みが特定の要件を満たしていない場合は、置き換えることができます。_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 ブロックで提供される絞り込みではなく、
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
特定のダッシュボードの編集
特定のダッシュボードのフィルタを変更するには、ダッシュボード ファイルを見つけて、変更が必要なプロパティとともにフィルタ名を追加します。この変更は 1 つのダッシュボードに限定されます。たとえば、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 ダッシュボードの構築をご覧ください。