OmniのTopicsを作成してユーザーフレンドリーかつセキュアなBI基盤を作成する

OmniのTopicsを作成してユーザーフレンドリーかつセキュアなBI基盤を作成する

2025.11.12

こんにちは、業務効率化ソリューション部のikumiです。
今回は、Omniでモデリングを行う際の要素となる、Topicsについて紹介します。

Topicとは

Topicsは、Omniのモデル内で定義されるユーザー向けのデータソースのような役割で、LookerのExploreのような機能です。ユーザー向けに、事前にJoinの定義や、ユーザーごとの行レベル・列レベルの表示制御を適用させることも可能です。

実際には、定義済みのviewを直接参照してダッシュボードの作成を進めることは可能ですが、データテーブル間の関係性などが分からないユーザーにとっては不便ですし、ガバナンスの観点でも推奨できません。そのため、ユーザー向けの分析基盤を提供するには、まずはTopicsの作成 を進めましょう。

Topicsの作成方法

Topicsの基本設定

  • まずは編集したいモデルの編集画面に入り、必要に応じてブランチを切って作業します
    omni-create-topics-basicsetting-no1
  • 次にTopics作成についてですが、モデルの編集画面上のTOPICSから+を押すことで作成できます
    omni-create-topics-basicsetting-no2
  • 任意の名前でTopicsを作成したら、base_viewを指定します
    • Joinの定義をする必要がなければ、以下のようにbase_viewの指定のみでTopicsを使用できる状態になります
#test_topics
base_view: dbt_ikumi_japanese__orders

joins: {}
  • 今回は、まずJoinとラベルの設定をしてみます
#test_topics
base_view: dbt_ikumi_japanese__orders
label: jaffle-shop-analytics-for-user #ユーザーに表示されるTopics名

joins:
  dbt_ikumi_japanese__customers: {}

relationships:
  - join_from_view: dbt_ikumi_japanese__orders
    join_to_view: dbt_ikumi_japanese__customers
    join_type: always_left
    on_sql: ${dbt_ikumi_japanese__orders.customer_id} = ${dbt_ikumi_japanese__customers.customer_id}
    relationship_type: many_to_one
  • なお、relationshipsの定義自体は上記のようにTopicsファイルに直接記載することも可能ですが、relationshipsファイル上にも記載することが可能です。relationshipsファイルに記載すると、そのモデル全体で結合の定義が適用されますので、再利用性や管理の観点から、実際にはrelationshipsファイルに定義を記載することを推奨 します
    omni-create-topics-basicsetting-no3
  • 続いて、一度この状態で、Topicsへの接続権限を持っているユーザーでクエリの作成に進んでみます
  • 確認すると、モデルファイルで定義したすべてのTopicsが閲覧でき、クエリ作成も行うことができました!
    omni-create-topics-basicsetting-no4
    omni-create-topics-basicsetting-no5

Topicsごとのアクセス制御

  • では次に、Topicsごとのアクセス制御を適用してみましょう。今回は、事前に作成したユーザーグループ単位でアクセス制御を行います
  • Topicsのアクセス制御は、required_access_grantsパラメーターにて制御を行うことができます
  • そのため、まずは事前にモデルファイル上で以下の通りaccess_grantsを定義しました
#model
access_grants:
  admin_access: #管理者グループ向けのaccess_grants
    user_attribute: omni_user_groups
    allowed_values: [ admin ]
  team_a_access: #ユーザーグループ向けのaccess_grants
    user_attribute: omni_user_groups
    allowed_values: [ team_a ]
  • 続いて、Topicsファイルでrequired_access_grantsのパラメーターを設定します
#test_topics
base_view: dbt_ikumi_japanese__orders
label: jaffle-shop-anaytics-foruser

#今回のステップで追加
#ユーザーグループ:team_aに所属してるユーザーのみに表示
required_access_grants: [ team_a_access ] 

joins: {}

relationships:
  - join_from_view: dbt_ikumi_japanese__orders
    join_to_view: dbt_ikumi_japanese__customers
    join_type: always_left
    on_sql: ${dbt_ikumi_japanese__orders.customer_id} = ${dbt_ikumi_japanese__customers.customer_id}
    relationship_type: many_to_one
  • なお、これ以外のTopicsにはadminのユーザーグループのみに表示するように設定をしました
  • team_aに所属しているユーザーでクエリの作成をしてみると、想定通りjaffle-shop-analytics-foruserのTopicsのみが表示されています!
    omni-create-topics-basicsetting-no6

さいごに

いかがでしたでしょうか。今回は、基本の設定であるjoinの定義やアクセス制御について試してみましたが、他にもキャッシュの設定など色々な設定ができますので、また別のブログで試してみます!

この記事をシェアする

FacebookHatena blogX

関連記事