🐶

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の管理画面から行います。

手順:

  1. Sigmaの管理画面(Administration)を開く
  2. 「Account」メニューをグーっと下の方に行くとあります
  3. 「Add Custom Function」をクリック
  4. 以下の項目を設定する
項目 設定内容
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みたいに計算フィールドに関数を書くだけで使えます。

手順:

  1. Sigmaでワークブックを開く
  2. 分析したいテーブルまたは集計データを用意する
  3. テーブルに新しいカラムを追加し、カスタムファンクションを呼び出す数式を入力する
  4. 生成されたテキストカラムをUI要素として配置する

まずは実際に使っているところをお見せしましょう。
架空のVtuberの配信データを読み込ませてAIに分析をさせてみます。

数式の記述例:

AIQuery("次のデータはVtuberと配信したゲームと視聴者数である。Vtuber毎に分析を出して", [Vtuber&ゲーム&視聴者数])

とまあこんな感じで、ダッシュボード上でAI関数(裏側はCORTEX AI SQL)が使えます。

渡す引数は、集計済みのテキスト形式のデータが理想的です。たとえばCONCATでデータをまとめた文字列を作り、それをListAgg関数で1行にまとめて、AI Queryに渡すのが一般的なパターンです。

何を言っているか分からないと思いますので、簡単に実例をご紹介します。

今回AIに渡したデータはこちらです。

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

ではこのデータはどのように作っているかというと、

このように

  1. まずVtuber名/配信ゲーム/視聴者数を行単位でまとめます
  2. それをVtuber単位で更に1行にまとめます(ここで使われるのがListAgg関数)
  3. 最後に、全部を1行にまとめます(ここでもListAgg関数)
  4. (段階的に分けてますが、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 までよろしくお願い致します。

truestarテックブログ

Discussion