CHAPTER 04

Semantic Layer設計

AIが業務の意味を正しく理解するための設計

4-1. Semantic Layerとは

Semantic Layerは、データベースの物理構造と、利用者が使う業務用語の間をつなぐ層です。Snowflakeでは新規実装ではSemantic Viewが推奨されています。

flowchart LR U[利用者
売上・粗利・顧客] --> S[Semantic View] S --> P[物理データ
SALES_AMT / COST_AMT / CUST_ID]

4-2. 旧Semantic ModelとSemantic View

項目旧 Semantic Model YAMLSemantic View
保存Stage上のYAMLSchemaレベルのSnowflakeオブジェクト
新規実装後方互換として利用可能推奨
権限・メタデータファイル管理中心Snowflakeオブジェクトとして統合
用途Cortex AnalystCortex Analyst / Cortex Agent
教材では旧資料を読むために「Semantic Model」という名称も扱いますが、新規設計はSemantic Viewを基本とします。

4-3. Semantic Viewで定義するもの

Logical Table

分析対象となる業務上のテーブル。

Dimension

商品、顧客、地域、日付など、分析軸。

Fact

売上金額、数量、原価などの数値。

Metric

売上、粗利率、顧客単価などの計算済み指標。

Relationship

売上と商品、売上と顧客などの関係。

Filter

有効顧客、対象期間など再利用する条件。

4-4. 良い定義と悪い定義

対象悪い例良い例
売上金額「売上」「税抜販売金額の合計。返品伝票は除外。会計年月ベースで集計する」
顧客「顧客コード」「請求先単位の顧客。社内取引先は除外」
粗利率「利益率」「(売上金額-売上原価) ÷ 売上金額。売上0の場合はNULL」

AI精度を上げるためには「人が読んでも迷わない説明」を付けるのが基本です。

4-5. 指標をSemantic Viewへ寄せる

同じ「売上」でも部門ごとに定義が違うと、AI回答が不安定になります。重要KPIはSemantic ViewのMetricとして明確化します。

売上金額      = 税抜販売金額の合計
粗利          = 売上金額 - 売上原価
粗利率        = 粗利 / 売上金額
購入顧客数    = DISTINCT 顧客ID
顧客単価      = 売上金額 / 購入顧客数

4-6. Verified Query Repository(VQR)

Verified Query Repositoryは、正しいことを人が確認した「質問とSQL」の組み合わせを登録し、類似質問のSQL生成精度を高める仕組みです。

flowchart LR Q[利用者の質問] --> A[Cortex Analyst] V[Verified Query
質問+正解SQL] --> A A --> SQL[より信頼性の高いSQL]
テクニック:「売上TOP10」「前年同月比」「粗利率」「既存顧客売上」など、頻出かつ重要な質問からVerified Queryを登録します。

4-7. Sample ValuesとLiteral検索

商品名や地域名など、利用者が入力する値とDB上の値が微妙に違う場合があります。低カーディナリティのDimensionにはSample Valuesを持たせる、値種類が多い場合はCortex Searchを使ったLiteral検索を検討します。

利用者:「東京エリア」 → 実データ:「東京都」

この差を吸収できると、WHERE条件の誤りを減らせます。

4-8. Semantic Viewの分割方針

巨大な全社モデルを1つだけ作るより、質問のまとまりごとに分割する設計が実務では管理しやすくなります。

Semantic View例主な質問
SALES_ANALYTICS売上、粗利、商品、顧客、地域
INVENTORY_ANALYTICS在庫数量、在庫金額、欠品
AR_ANALYTICS売掛金、入金、与信

この章で理解したこと

  • 新規実装ではSemantic Viewが推奨
  • 業務用語・関係・Metricを明文化する
  • Verified Queryは精度向上の重要テクニック
  • Sample ValuesやLiteral検索も有効
  • Semantic Viewは業務領域ごとに適切に分割する
← 第3章へ 目次へ戻る 第5章へ →