dbt Semantic Layer と Cortex Analyst の違いをまとめてみた

# はじめに
dbt Cloudのメイン機能の一つである[dbt Semantic Layer](https://www.getdbt.com/product/semantic-layer)は、従来のSemantic Layer製品と異なりデータプロダクトの近くでビジネス指標をメトリクスとして定義して集約的に管理でき、BIツールやユーザを横断して統一的なビジネス指標を参照できるようになることがメリットで注目を浴びていました。

そんな中、2024年8月にSQLを記述することなく自然言語での質問によってビジネス指標の取得が可能となる[Snowflake Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst)がプレビューとなりました。自然言語とSQLのギャップを埋めるためにセマンティックモデルを用いることでより安定的なビジネス指標の取得を実現しています。

当初Cortex Analystの発表を受けたとき、あれ？データプロダクト近くでのビジネス指標管理やセマンティックモデルでの定義など、割とdbt Semantic Layerと被ってくるのでは...？？と思ったので、改めて違いについてまとめてみます。

# コンセプトの違い
dbt Semantic Layerは、ビジネスユーザごとにバラバラに定義されているビジネス指標を一元的に管理し、その指標へ好きな分析ツールからアクセスすることで信頼性高く意思決定を加速させていくことを目的としています。
すでに分析プロセスが確立されている中で、サイロ化したプロセスを統合して最適化していく流れでより力を発揮する印象です。

Cortex Analystは、ビジネスユーザが自然言語を用いて自由度高くデータを探索し、セルフBIを加速させていくことを目的としています。
こちらはライトユーザでもデータからインサイトを得られるようにして、セルフBIを拡大していく流れでより力を発揮する印象で、dbt Semantic Layerにあるようなビジネス指標管理の側面は薄く見えます。

コンセプトからすると、dbt Semantic Layerの方は少しアナリスト寄り、Cortex Analystの方がよりライトな分析ユーザ寄りのイメージですね！

:::note info
dbt Semantic Layerも、[dbt Snowflake Native App](https://docs.getdbt.com/docs/cloud-integrations/snowflake-native-app)のAsk dbtを用いることで自然言語での問い合わせを容易に実現できるようにしていますが、本稿では割愛します。
:::

# 定義面の違い
dbt Semantic Layerは**Semantic model と Metrics**を組み合わせて定義を行います。
Cortex Analystは、Metricsはなく**Semantic modelのみ**の定義となります。

コンセプトの通り、dbt Semantic Layerはビジネス指標を一元的に定義していくためのMetricsが必要ということですね。

以下で[Semantic modelの違い](#semantic-modelの違い)と[Metricsの有無による影響](#metricsがあると何が定義できるようになる)について記載しようと思います。

※以下提示する例では[サンプルデータ: TPC-H](https://docs.snowflake.com/ja/user-guide/sample-data-tpch)を用いています。

## Semantic modelの違い
大枠の構成は両者ともに同じで、**対象テーブルの情報**と保持しているカラムを用いて **メジャー（数値指標）** と **ディメンション（分析軸）** を定義します。
ですが、コンセプトの違いの通り、dbt Semantic Layerはビジネス指標をメトリクスとして定義するための準備要素が強く、Cortex AnalystはSQL精度向上のためのメタデータ拡充要素が強いことからオプションで差が生じているため一部抜粋して紹介いたします。

### dbt Semantic Layer特有の設定
* **non_additive_dimension**
銀行口座の残高などの時間軸で非加算のメジャー項目に対する設定です。
`name`で加算できない時間軸の名称を設定し、`window_choice`にて時間軸におけるどの断面を取得するかを設定できます。
不正確なビジネス指標（集計結果）を活用しないように管理するうえで重要な設定項目ですね。

* **create_metric**
`True`としておくことで、メジャー指標をメトリクスとして活用することができるようになります。
ver1.7以上で追加された項目であり、単純な合計などのメジャー定義で表現しきれている場合でもわざわざMetricsファイルにおいて宣言する必要あった二度手間が解消され、メトリクス管理が行いやすくなりました。
```yaml:合計金額をメトリクスとして定義
- name: totalprice  
  description: Sum of totalprice
  agg: sum
  expr: o_totalprice
  create_metric: true
```

### Cortex Analyst特有の設定
* **synonyms**
メジャーやディメンションの別称を定義することができます。ビジネスユーザごとに使用している言葉の細かい差異を吸収することができます。
* **sample values**
ディメンションのサンプル値を定義することができます。サンプル値を用いることで、抽出条件の適正化などSQLの精度を向上することができます。

```yaml:sample valuesの記載例
dimensions:
- name: O_ORDERPRIORITY
    expr: O_ORDERPRIORITY
    description: flag to determine if the order is prioritized
    data_type: VARCHAR
    unique: false
    sample_values:
          - 1-URGENT
          - 2-HIGH
          - 3-MEDIUM
          - 4-NOT SPECIFIED
          - 5-LOW
```
以下の通り、`sample values`に設定した値を用いて、SQLが適切に作成されるようになります。

![sample_valueの設定結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928207/76dea480-97d8-534e-1cb4-e2e0563f8f74.png)


## Metricsがあると何が定義できるようになる？
正直なところ、単純なビジネス指標であればSemantic modelのメジャー定義の`expr`の書き方次第で定義できてしまいます。例えば以下のようなメトリクスは、Metricsを用いて定義することもできますが、メジャー定義だけでも可能となります。

```yaml:出荷済みの注文額の合計：Metricsで定義
- name: f_totalprice
    description: sum of finished totalprice
    type: simple
    type_params:
      measure: totalprice
    label: Finished order totalprice 
    filter: |
    {{Dimension('orderkey__orderstatus')}} = 'F'
```
```yaml:出荷済みの注文額の合計：Semantic modelのメジャーで定義
- name: totalprice_status_f
  description: Totalprice where orderstatus is 'F'
  agg: sum
  expr: case when o_orderstatus = 'F' then o_ordertotal else null
```

ですが、dbt Semantic LayerにおいてはMertricsがあることで、例えば以下のようなビジネス指標管理が容易に実現できるようになります。

* **テーブル横断の指標管理**
Semantic modelのメジャー定義で活用できるのは、同一テーブル内で保持しているカラムになります。
そのため、別テーブルの項目でフィルタなどはMetricsにて実現する必要があります。

* **指標間の組み合わせ**
メトリクスとして定義した指標同士を組み合わせて新たなメトリクスとして定義することが可能です。
売上合計の成長率のように当月の売上合計と前月の売上合計を組み合わせた指標定義も容易に行うことができます。

* **Metrics特有の設定を用いた指標定義**
Metrics定義においては、`ratio`や`cumulative`など様々なタイプ定義を用意しており、比率やウィンドウ計算など少し複雑な指標定義を容易に行うことができるようになります。

このように、複雑なビジネス指標をメトリクスとして管理して統制していこうと思うと、Metrics設定の重要性が際立ってきますね！

:::note info
Cortex Analystにおいても、[verified_queries](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec#verified-queries)を用いて複雑なメトリクスを定義することは可能ですが、SQLをフルで記載する必要があるなど少々煩雑となります
:::

# 活用面の違い
Cortex Analystは[REST API](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/rest-api)でのアクセスを前提としています。既存の対話型アプリに組み込むことで、コンセプトの通りユーザが自然言語で問い合わせてデータに関するインサイトを取得していくような活用が想定されます。

dbt Semantic Layerは、[API](https://docs.getdbt.com/docs/dbt-cloud-apis/sl-api-overview)でのアクセスに加え、TableauやGoogle Sheets、HEXなどのBIツールやアプリケーション（サポート対象のツールは[こちら](https://docs.getdbt.com/docs/cloud-integrations/avail-sl-integrations)）と統合して活用することができます。以下のように定義されているメトリクスを参照しながら、ディメンション含めて自由に選択し、インサイトを取得していくような活用が想定されます。

![tableauでの活用イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928207/bc14f037-2bbc-1eb0-35d6-1f24f0a0daa1.png)

また、メトリクスについてもリネージを取得することが可能なため、活用したメトリクスがどのデータに基づいているか容易に確認することができるのも、ビジネス指標を統制していく上では重要ですね！
![メトリクスのリネージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928207/9f223dad-818a-242c-da3c-ac0e23d82cff.png)


# おわりに
dbt Semantic Layerは、豊富なコネクタや統制されたメトリクス活用によってユーザごとの分析差異を吸収できるため、コンセプトの通りサイロ化したビジネスプロセスを統合していきつつ、意思決定を加速していく際により力を発揮します。
導入する際には、単なるメタデータ拡充にとどまらずビジネスプロセス全体へ目を向けたうえで、どこを統合して統制していけばコストメリットがあるかを考えることが重要ですね。
Coalesce 2024にて、[One dbt](https://www.getdbt.com/blog/coalesce-2024-product-announcements)という概念が発表されるなど、よりビジネスプロセス統合に向けた動きが加速していくようなので引き続き活用していきましょう！

# 仲間募集
 
NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。
 
<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>
 
クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer
 
</details>
 
<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>
 
データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist
 
</details>
 
<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>
 
DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804
 
</details>
 
<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。
 
https://nttdata.jposting.net/u/job.phtml?job_code=898
 
</details>
 
 
# ソリューション紹介
 
<details><summary> Trusted Data Foundationについて</summary><div>
 
～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://www.nttdata.com/jp/ja/lineup/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。
 
</div></details>
 
<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>
 
～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://www.nttdata.com/jp/ja/lineup/tdf_am/
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。
 
</div></details>
 
 
<details><summary> NTTデータとDatabricksについて </summary>
NTTデータは、お客様企業のデジタル変革・DXの成功に向けて、「databricks」のソリューションの提供に加え、情報活用戦略の立案から、AI技術の活用も含めたアナリティクス、分析基盤構築・運用、分析業務のアウトソースまで、ワンストップの支援を提供いたします。
 
https://www.nttdata.com/jp/ja/lineup/databricks/
 
</details>
 
 
<details><summary>NTTデータとTableauについて </summary><div>
 
ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。
 
これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://www.nttdata.com/jp/ja/lineup/tableau/
 
</div></details>
 
 
<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。
 
Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。
 
導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。
 
https://www.nttdata.com/jp/ja/lineup/alteryx/
 
</div></details>
 
<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。
 
NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。
 
https://www.nttdata.com/jp/ja/lineup/datarobot/
 
</div></details>
 
<details><summary> NTTデータとInformaticaについて</summary><div>
 
データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://www.nttdata.com/jp/ja/lineup/informatica/
 
</div></details>
 
<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。
 
NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。
 
https://www.nttdata.com/jp/ja/lineup/snowflake/
 
</div></details>