
OmniのTopicsを作成してユーザーフレンドリーかつセキュアなBI基盤を作成する
2025.11.12
こんにちは、業務効率化ソリューション部のikumiです。
今回は、Omniでモデリングを行う際の要素となる、Topicsについて紹介します。
Topicとは
Topicsは、Omniのモデル内で定義されるユーザー向けのデータソースのような役割で、LookerのExploreのような機能です。ユーザー向けに、事前にJoinの定義や、ユーザーごとの行レベル・列レベルの表示制御を適用させることも可能です。
実際には、定義済みのviewを直接参照してダッシュボードの作成を進めることは可能ですが、データテーブル間の関係性などが分からないユーザーにとっては不便ですし、ガバナンスの観点でも推奨できません。そのため、ユーザー向けの分析基盤を提供するには、まずはTopicsの作成 を進めましょう。
Topicsの作成方法
Topicsの基本設定
- まずは編集したいモデルの編集画面に入り、必要に応じてブランチを切って作業します

- 次にTopics作成についてですが、モデルの編集画面上のTOPICSから
+を押すことで作成できます

- 任意の名前で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ファイルに定義を記載することを推奨 します

- 続いて、一度この状態で、Topicsへの接続権限を持っているユーザーでクエリの作成に進んでみます
- 確認すると、モデルファイルで定義したすべてのTopicsが閲覧でき、クエリ作成も行うことができました!


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のみが表示されています!

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








