Sigmaで作る、AIサマリー付きダッシュボード──一人ひとりに"自分だけの概況"を届ける
はじめに
BI × AI、という言葉をよく聞くようになって久しいです。
「ダッシュボードにAIを組み込みたい」「数字を見るだけじゃなく、AIに解釈してほしい」──そういうニーズを持っているBIユーザーは多いと思います。しかし、想像しているようないい感じのBI × AIを体現してくれる製品の選択肢はまだあまり多くありません。
そんな中で今回紹介したいのが、SigmaのAI Queryです。
Sigmaは、SnowflakeなどのクラウドデータウェアハウスをバックエンドにしたBIツールで、スプレッドシートライクなUIが特徴です。そのSigmaに、AI機能として搭載されているのがAI Queryです。
この記事では、AI Queryを使ってダッシュボード上でAIによる概況分析を表示する方法と、さらに一歩進んで「アクセスしているユーザー自身にパーソナライズされたAIサマリ」を出す方法まで紹介します。
1. AI Queryとは
SigmaにおけるAI Queryの概要
AI QueryはSigmaのワークブック上で使えるAI機能です。一言でいうと、
テーブルやビジュアルのデータをもとに、AIがテキストで分析・要約を生成してくれる機能
です。
グラフの下に「今月の売上は先月比で15%増加しており、特にXXカテゴリの伸びが顕著です」みたいな文章が自動で生成されて表示されたら、嬉しくないですか?嬉しいですよね?
数字を読むのが苦手なメンバーにとっては、ダッシュボードの読解コストが大幅に下がります。
裏側の仕組み:DWHのAI機能をそのまま呼ぶ
仕組みとしては、DWHが持っているAI関数をそのままSigmaから呼び出してダッシュボード上で使います。
つまり、AI処理はSigmaの外ではなく、接続しているデータウェアハウスの中で完結します。
対応しているDWHはSnowflake・Databricks・BigQuery・Amazon Redshiftの4つ。たとえばSnowflakeならSNOWFLAKE.CORTEX.COMPLETE、DatabricksならAI関数(ai_classifyなど)をそのまま呼び出せます。
Sigmaのワークブック上での記述はこんな形になります。
CallText("SNOWFLAKE.CORTEX.COMPLETE", "llama2-70b-chat", "売上データを日本語で3文以内にまとめて" & [売上メモ])
CallTextはパススルー関数と呼ばれるものの一つで、DWHにリクエストを投げてその結果をSigmaに返すという役割を担っています。
データをSigmaの外に持ち出さず、SnowflakeやDatabricksの中でAIが動くので、セキュリティやガバナンスの管理がDWH側で一元化できるのは、企業にとって地味にうれしいポイントです。
ただ正直、上記のような関数を毎回書くのは面倒くさすぎるちょっとハードルが高いですよね。そこで登場するのがカスタムファンクションです。
カスタムファンクションとは何か・なぜ必要か
カスタムファンクションとは、パススルー関数の複雑な記述を「簡単な関数名」にラップして、面倒な記述を省く辞書登録のような仕組みです。
管理者がカスタムファンクションを登録しておけば、他のメンバーはAI_SUMMARY([売上列])のように書くだけでAIサマリが出てくる環境が整います。
組織にとっての嬉しさはここです。
- プロンプトを毎回書かなくていい
- 組織内で同じAI体験を統一できる
- BI担当者がカスタムファンクションを整備すれば、他のメンバーは難しいことを知らずに使える
カスタムファンクションの作り方
カスタムファンクションの作成はSigmaの管理画面から行います。
手順:
- Sigmaの管理画面(Administration)を開く
- 「Account」メニューをグーっと下の方に行くとあります
- 「Add Custom Function」をクリック
- 以下の項目を設定する
| 項目 | 設定内容 |
|---|---|
| Name | 関数名(例:AIQuery) |
| Description | 関数の説明 |
| Arguments | 関数に渡す引数(名前・型・説明を定義) |
| Formula | パススルー関数を使った実際の式 |
設定例(Snowflake Cortex使用の場合):
Argumentsは以下の2つを定義します。(ここは数・内容ともに自由に変更可能)
| Name | Type | Description |
|---|---|---|
| prompt | Text | Apply any natural language manipulation of the data. |
| data | Text | The column that you wish the prompt to process. |
Formulaにはパススルー関数CallTextを使って以下のように記述します。
CallText("SNOWFLAKE.CORTEX.COMPLETE", "snowflake-llama-3.3-70b", [prompt] & ": " & [data])
このように設定することで、実際の画面では以下のように書くだけで簡単にCORTEX COMPLETE関数が使えます。
AIQuery("売上データを日本語で3文以内にまとめて" , [売上メモ])
[prompt] と [data] がArgumentsで定義した引数で、実際のプロンプト(売上データを...)
と、参照するデータ([売上メモ])が入って来ます。
内部ではCallText(パススルー関数)を使ってSnowflakeのCortex AIに処理を投げており、結果がSigmaの列にテキストとして返ってきます。
詳細な設定方法はSigma公式ドキュメント(Custom Functions)を参照してください。
組織で共有することのメリット
カスタムファンクションはSigmaのOrganizationレベルで管理されるため、一度登録すれば組織内の全メンバーが使えます。
先ほどの例ではプロンプトも引数にしてユーザーに入力させる形でしたが、プロンプトを引数にせずfomula欄に固定で入力してしまえば、「AI使いたいけどプロンプトの書き方がわからない」というメンバーでも、AI_SUMMARY(data_column)と書くだけでAIサマリが出てくる環境が整います。
BI担当者が"いいプロンプト"を探して磨いておけば、その恩恵が全員に届く。これがカスタムファンクションの一番の強みだと思います。
BI担当者の腕の見せ所ということです。 気張っていきましょう。
2. ダッシュボードへの組み込み方
カスタムファンクションが登録できたら、あとはワークブックで使うだけです。
Sigmaの良いところはExcelライクなUIなので、Excelみたいに計算フィールドに関数を書くだけで使えます。
手順:
- Sigmaでワークブックを開く
- 分析したいテーブルまたは集計データを用意する
- テーブルに新しいカラムを追加し、カスタムファンクションを呼び出す数式を入力する
- 生成されたテキストカラムをUI要素として配置する
まずは実際に使っているところをお見せしましょう。
架空のVtuberの配信データを読み込ませてAIに分析をさせてみます。
数式の記述例:
AIQuery("次のデータはVtuberと配信したゲームと視聴者数である。Vtuber毎に分析を出して", [Vtuber&ゲーム&視聴者数])

とまあこんな感じで、ダッシュボード上でAI関数(裏側はCORTEX AI SQL)が使えます。
渡す引数は、集計済みのテキスト形式のデータが理想的です。たとえばCONCATでデータをまとめた文字列を作り、それをListAgg関数で1行にまとめて、AI Queryに渡すのが一般的なパターンです。
何を言っているか分からないと思いますので、簡単に実例をご紹介します。
今回AIに渡したデータはこちらです。

ご覧いただいてわかる通り、全てを一つにまとめています。
SigmaのAIQueryに渡すデータは、このような形で一行にまとまっている必要があります。
ではこのデータはどのように作っているかというと、

このように
- まずVtuber名/配信ゲーム/視聴者数を行単位でまとめます
- それをVtuber単位で更に1行にまとめます(ここで使われるのがListAgg関数)
- 最後に、全部を1行にまとめます(ここでもListAgg関数)
- (段階的に分けてますが、ListAgg関数の中にCONCAT関数とか入れれば一発でできます)
そして次に、出力結果をダッシュボード上のテキストブロックやUIコントロールとして表示すれば、グラフや数字の隣にAIの解釈テキストが並ぶダッシュボードの完成です。
3. 実例:こんな分析テキストが出せる
実際にどんな出力になるか、イメージを共有します。
たとえばVtuber管理ダッシュボードの場合、こんな感じのテキストが生成されます。
「六條ひろな藤咲トワの視聴者数の分析を以下に示します。
六條ひろな - 最人気ゲーム:Phasmophobia(64.69 万人)・・・
藤咲トワ - 1番人気ゲーム:Phasmophobia(145.25 万人)・・・
全 体 - 人気が高いゲーム:Phasmophobia・・・
提 言 - 人気が高いゲームを中心に配信する - 新しいゲームに挑戦する - コミュニケーションを重視したゲームを選ぶ - ファンの要望に応えることで、視聴者数を増やすことができる。」
数字を読んで自分で解釈する必要がなく、パッと状況が把握できます。
また、以下のようなユースケースにも対応できます。
- KPIダッシュボード:主要指標の増減をまとめて解釈
- 営業レポート:担当者ごとの活動状況をテキストで要約
- 在庫・オペレーション:異常値やアラートを自然言語で通知
プロンプトをカスタムファンクション側で調整することで、出力のトーンや粒度もコントロールできます。「箇条書きで出す」「3文以内にまとめる」「課題点だけフォーカスする」など、用途に合わせて使い分けができます。
4. 応用:ログインユーザー別のパーソナライズサマリ
ここからが本番です。
AIサマリを「全員が同じ内容を見る」のではなく、「ダッシュボードにアクセスしているユーザーに合った内容が出てくる」ようにしてみます。
データをアクセスユーザーでフィルターする仕組み
SigmaにはCurrentUserEmail()という組み込み関数があります。これは、現在ダッシュボードにアクセスしているユーザーのメールアドレスを返します。
同じようにCurrentFullName()などもあります。
これをフィルター条件として使うことで、「自分のデータだけ」を絞り込んだビューを作れます。
例えばここにいい感じのSalesデータがあります。

このデータに担当者のメールアドレスとCurrentUserEmail()を追加して
[担当者メール] = CurrentUserEmail()
この条件をtrueでテーブルのフィルターに設定すると、鈴木さんがアクセスすれば鈴木さんの担当データだけ、佐藤さんがアクセスすれば佐藤さんの担当データだけが表示されます。

パーソナライズされたAIサマリが生成されるまでの流れ
仕組みをまとめるとこうなります。
ユーザーがダッシュボードにアクセス
↓
CurrentUserEmail() でログインユーザーを特定
↓
そのユーザーに紐づくデータのみフィルタリング
↓
フィルター済みデータをAI Queryに渡す
↓
「あなたの担当案件の概況」が生成される
結果として、同じダッシュボードURLにアクセスしても、人によって表示されるAIサマリの内容が変わります。
鈴木さんには「今月の担当案件は全体的に順調です。ただしA社案件が停滞気味で、フォローが必要そうです」と出て、佐藤さんには「今月は新規案件の獲得が好調です。B社との商談が特に有望です」と出る、というイメージです。

まとめ
SigmaのAI Queryでできることを整理するとこうなります。
| やりたいこと | 実現方法 |
|---|---|
| ダッシュボードにAIサマリを表示したい | AI Query + カスタムファンクション |
| 組織で統一したAI体験を提供したい | カスタムファンクションで共有 |
| ユーザーごとにパーソナライズしたい |
CurrentUserEmail() でフィルター + AI Query |
「BI × AI」を実現しようとすると、カスタム開発が必要だったり、データをどこかに持ち出す必要があったり、セキュリティ面で難しい判断が出てきたりすることが多いです。
SigmaのAI Queryは、Snowflake / Databricks上のAI機能をそのまま活かしながら、ダッシュボードに自然な形でAIを組み込める点で、現時点では実用性の高い選択肢の一つだと思っています。
特にパーソナライズサマリは、「全員が同じダッシュボードを見て、自分に関係ある部分だけをAIが解説してくれる」という体験を、ほぼノーコードで作れるのがかなり面白いところです。
興味のある方はぜひ試してみてください。
掲載の記事に関して、またはSigmaを中心としたデータ分析のお問い合わせに関しては
お問い合わせ | 株式会社truestar までよろしくお願い致します。


Discussion