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 でも利用可能な場合)

ファイル ブラウザ

図 1Looker ブロック内のフォルダ構成の例。

モデル

モジュラー ファイル管理では、次のパラメータを使用してプロジェクトの model ファイルをスリム化します。

  1. 乗り継ぎ
  2. include

    含まれるファイルの種類は次のとおりです。

    • コンポーネント(データグループ、関連する場合は 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: 複数のビューのフィールドを参照するビュー。

接尾辞の例

図 2ビューのタイプを示す接尾辞の例。

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

アノテーション

図 3ビュー定義内のアノテーションの例。

ネストされた繰り返しレコード

ネストされた繰り返しレコードを含む基盤となるテーブルの場合、Looker はこれらのレコードのネストを解除する個別のビューを作成します。たとえば、Oracle EBS Looker ブロックの sales_orders テーブルには、lines という名前のネストされた繰り返し構造体があります。Looker では、これらは sales_orderssales_orders__lines の 2 つの異なるビューとして扱われます。

ネストされていないこれらのレコードを Explore 内で結合するには、UNNEST コマンドと組み合わせて sql プロパティを使用して結合を定義する必要があります。

UNNEST コマンド

図 4. UNNEST コマンドと組み合わせて「sql」プロパティを使用して結合する例。

詳細については、Looker でネストされた BigQuery データをモデル化する方法をご覧ください。

Cortex Framework Looker ブロックには、ビューやその他のオブジェクトに詳細なコメントが含まれています。コードのナビゲーションと理解を強化するには、LookML 開発環境で利用可能な Fold LookML オプションを使用することをおすすめします。

LookML を折りたたむ

図 5. [LookML を折りたたむ] をクリックする。

LookML を開く

図 6。クリックして LookML を開く。

もう一度折りたたむ

図 7。クリックして LookML をもう一度閉じる。

フィールド

field という用語は、dimensionmeasurefilterparameter などのオブジェクトを指します。これらの新しいブロックでは、次の原則に従いました。

  1. ディメンションの名前は、snake_case(小文字で単語をアンダースコアで区切る)で指定します。例: customer_name
  2. ディメンションの名前には、基になるテーブルの列名が使用されます。ディメンションにラベルを適用して、ビジネスに適した名前を付けることができます。たとえば、division_hdr_spart という名前のディメンションには「部門 ID」というラベルが付けられます。
  3. 列の多いテーブルでは、デフォルトでフィールドが非表示になります。ビューの絞り込みを使用して、Explore に表示するフィールドのサブセットの hidden プロパティを「no」に設定します。フィールドが想定どおりに表示されない場合は、このフィールド プロパティを編集することで問題を解決できます。
  4. View_label プロパティと group_label プロパティは、必要に応じて Explore 内のフィールドを整理するために使用されます。
  5. 複数のビューで使用されるフィールドの場合、ラベルなどのプロパティは「共通」ビュー内に設定され、その後他のビューに拡張されます。このアプローチでは、プロパティの定義を一元化し、再利用を促進します。必要な変更は「共通」ビュー内で管理され、「共通」ビューが拡張されているすべてのビューに変更が反映されます。
  6. 複数の 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 ファイルを使用します。このビューには、マニフェスト ファイル内で定数として定義されている「🔍 フィルタ」というラベルが表示されます。

このラベルを変更するには:

  1. マニフェスト ファイルで label_view_for_filters 定数を見つけます。
  2. 定数の値を、選択したラベルに編集します。
  3. マニフェスト ファイルを保存します。変更は、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.viewsales_orders を絞り込み、測定値 average_sales を作成します。

include: "/views/base/sales_orders"
view: +sales_orders {
  measure: average_sales {
    type: average
    sql: ${order_value}
  }
}

2 つ目のリファイン ファイルを作成するには:

  1. 新しいリファインメント ファイルを作成します。名前は sales_orders_rfn2.view にします。
  2. 最初のリファインメント ファイルを含める: これにより、sales_orders_rfn のすべての定義が sales_orders_rfn2 に組み込まれます。
  3. ラベル プロパティを編集する: average_saleslabel プロパティを「平均費用」または任意のラベルに変更します。
  4. 新しいディメンションを追加する: 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})
      }
    }
    
  5. Explore に 2 番目の絞り込みファイルを含める: これにより、sales_orders_rfn2 のすべての定義と拡張機能が Explore に組み込まれます。

    include: "/views/core/sales_orders_rfn2.view"
    explore: sales_orders {
    }
    

新しい調整レイヤを作成する

Cortex Framework Looker ブロック内で定義されたベースビューの絞り込みが特定の要件を満たしていない場合は、置き換えることができます。_rfn ファイルを直接編集して、不要なフィールド定義を削除したり、新しいフィールド定義を追加したりできます。

または、新しい絞り込みファイルを作成します。

  1. 新しいリファイン ファイルを作成する: sales_invoices_rfn という名前を付けて保存します。
  2. ベースビューを含める: これにより、ベースビュー sales_invoices のすべての定義が sales_invoices_rfn に組み込まれます。
  3. 選択したカスタマイズを追加する: ディメンションを主キーとして定義することも忘れないでください。

    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) ;;
      }
    }
    
  4. 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.dashboardcustomer_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 ダッシュボードの構築をご覧ください。