AIでMotionBoardのダッシュボードを作る手順|Snowflakeの対応していないデータ型への対処
今回は、AIが画面を操作して、月次売上ダッシュボードをMotionBoardで作りました。
お題は「とある町中華」の月次売上を定点観測する1枚です。数字はダミーで、データは弊社のSnowflakeに置きました。手本はPCの1440×900で、寸法、色、文字、選択時の状態を指定しています。
作成はAIが担当し、初回に約1時間51分、直し2回に約4時間11分、合わせて約6時間2分かかりました。テンプレートは使わず、白紙のボードから作っています。手本と採点の物差しは先に用意してあったので、この時間は手本を作る時間を含みません。カスタムビューは使っていません。
Snowflakeの型では、BOOLEANの列がMotionBoardで使えませんでした。Snowflake側に型を変えるビューを1つ足すと、数値の項目として読めました。
この記事は弊社の検証記録で、MotionBoardやSnowflakeの公式手順ではありません。
手本の画面

手本:先に用意した設計の画面(PC 1440×900)。この画面にどこまで近づけるかを測りました。数字はダミーです
完成した画面

図1:完成した画面。数字はダミーです
月を変える操作は3通りです。プルダウン、前の月・次の月のボタン、月別売上の棒を押す操作で、ボタンは前後の2つあります。どれも実際に押して、全部品が同じ月に切り替わることを確かめました。
作る手順の全体像
| 手順 | 進める内容 | 確認するもの |
|---|---|---|
| 1 データの型を確かめる | Snowflakeの列の型と、MotionBoardが読めるかを見ます。 | 警告の有無、使う列 |
| 2 数字を計算する | 集計はデータソース定義の中で行い、画面に固定の数字を書きません。 | 正解値との一致 |
| 3 月の操作をそろえる | 選んだ月をボード変数に持たせ、全部品を読み直します。 | 3通りの操作の結果 |
| 4 手本に寄せる | 配置、色、説明の箱を直します。 | 素の項目名、見切れ |
| 5 1画面に収める | 上の帯を含めて表示を確かめます。 | スクロールの有無 |
| 6 全月を照合する | 画面の文字と正解値を比べます。 | 不一致の件数 |
手順1 Snowflakeの型を確かめる
起きたこと
データソース定義でSnowflakeの表を選ぶと、BOOLEANの列がある表で次の警告が出ました。
MotionBoardで対応していないデータ型の項目が存在します。
今回の5表のうち、次の2表が該当しました。
| 表 | 列 | 型 | 起きたこと |
|---|---|---|---|
| 来店と会計 | 予約あり、返金あり | BOOLEAN | 警告のあと「データセット定義の読み込みに失敗しました。」と出て、OKを押せません。項目一覧にも出ません。 |
| 注文明細 | その来店の最初の注文、持ち帰り、手入力、飲み放題メニュー | BOOLEAN | 警告は出ますが、プレビューは動きました。 |
TIMESTAMP_NTZ、NUMBER、TEXTの列では問題が起きませんでした。
列を使わない場合はプレビューを切る
今回のダッシュボードは、BOOLEANの列を使いません。来店と会計は、定義のプレビューを切るとOKを押せるようになり、ボードの本体はこの方法で元の表を読んでいます。
列を使う場合はSnowflakeのビューで型を変える
BOOLEANの列も使いたい場合に備えて、型を変えるビューを別に試しました。真を1、偽を0にして、空は空のまま残します。
CREATE VIEW ORDER_SYSTEM.BI_COMPARE."来店と会計_MB用" AS
SELECT
"来店番号", "来店日時", "退店日時", "滞在分", "人数", "利用区分",
CASE "予約あり" WHEN TRUE THEN 1 WHEN FALSE THEN 0 END::NUMBER(1,0) AS "予約あり",
"テーブル", "テーブル定員", "エリア", "会計日時",
"会計金額(税込)", "会計金額(税抜)", "割引額", "分割払いの数",
CASE "返金あり" WHEN TRUE THEN 1 WHEN FALSE THEN 0 END::NUMBER(1,0) AS "返金あり",
"会計回数"
FROM ORDER_SYSTEM.BI_COMPARE."来店と会計";
検証用の定義でこのビューを読むと、警告は消え、プレビューは7,813行、17列で動きました。2列は数値の項目として項目一覧に出ています。
元の表とビューの件数は一致しました。
| 確認 | 元の表 | ビュー |
|---|---|---|
| 行数 | 7,813 | 7,813 |
| 予約あり 真/偽/空 | 79/7,734/0 | 79/7,734/0 |
| 返金あり 真/偽/空 | 0/7,583/230 | 0/7,583/230 |
空の230件が画面でどう表示されるかは確かめていません。ビューの作成とSQLの確認は約4分半でした。MotionBoard側の確認を含めた全体の時間は測っていません。
今回試したのは数値に変える形だけです。この項目を使った集計までは確かめていません。
手順2 数字はデータソース定義の中で計算する
カスタムビューは使わず、データソース定義のカスタム項目にSnowflakeのSQLを書きました。選んだ月は、ボード変数 `${選択月}` としてSQLに入れています。
KPI 4枚は、カード形式が1ページ1レコードの作りだったため、1部品の4行にする案をやめ、定義と部品を4つに分けました。
サブクエリのカスタム項目で明細を並べ替えると、Snowflakeの内部エラーが出ました。基本項目の来店番号で並べ替えると回避できました。
手順3 月の操作を1つの変数にそろえる
どの操作でも、ボード変数 `選択月` に月を書き込みます。プルダウン、前の月、次の月、Aの棒に、それぞれフローを1本ずつ置きました。
前の月・次の月は、値の計算をフローの中に書くと失敗しました。変数格納の計算式で `${選択月}` を文字列として扱うと「NaN/aN」になり、全部品が空になります。そこで、データソース定義に「前月値」「次月値」の項目を作り、フローが「データソースの項目値」として受け取る形にしました。端の月ではその月を返すので、押しても月は変わりません。
途中で次の2つの失敗がありました。
- 部品を足したあと、フローの再読み込みの対象に新しい部品が入っていませんでした。Bと90分以上の席が前の月のままになり、対象を全部に直しました。
- Aの項目に別名を付けると、棒を押したときの月の値が空になり、全部品がエラーになりました。フローの参照を別名に直しました。
部品を足すたびに、フローの再読み込みの対象を見直す必要があります。
手順4 手本に寄せる
初回の画面は、数字は正しかったものの、推移線や凡例などが入っておらず、素の項目名も残っていました。

図2:初回の画面。数字はダミーです
動かなかったところと代わりの方法
| 仕様 | 起きたこと | 採用した方法 |
|---|---|---|
| 説明の箱 | 標準の表示は「項目[値]」の書式で、別名を付けても書式が残りました。 | 項目に文章を連結し、表示内容をその項目だけにしました。 |
| Bの説明の箱 | 集計を外すと値が出ません。 | 透明な積み上げ縦棒をマスの上に重ね、文章の項目だけを出しました。 |
| 端の月の色 | ボタンの設定に、値で色を変える項目がありません。 | 条件設定の図形を下に置き、透明なボタンを上に重ねました。図形を上に置くとクリックを奪われます。 |
| 1画面に収める | 手順5で説明します。 | 下の部品を上げ、AとBの高さを詰めました。 |
| Aの差し色の下線 | Aを複製して細くする方法では、棒か月の文字が隠れました。 | 入れていません。各月の下に図形を10本置く案は試していません。 |
説明の箱は、Aで次の形になりました。

図3:Aの棒に乗せたときの説明の箱。数字はダミーです
先頭の「夜:」は棒の区分そのものの文字で、色の条件にも使っているため残りました。文章の項目は、SQLの書き方を3回やり直しています。相関サブクエリなどでは通らず、1か月1行の文字を作って引く形で動きました。
手順5 上の帯を含めて1画面に収める
閲覧画面には、MotionBoardの上の帯が約40pxあります。1440×900で作ったボードは、1440×900の表示領域ではこの分あふれます。
次の順に試しました。
| 試したこと | 結果 |
|---|---|
| ボード設定で帯を隠す | 編集できる人の画面では帯が残りました。設定が効くのは編集できない人です。 |
| ページ設定「ウィンドウの高さに合わせる」 | スクロールは消えますが、下が切れました。 |
| 下の部品を28px上げ、AとBの高さを詰める | 全部収まりました。 |

図4:アプリの外枠を1440×900に縮めて確かめた画面。数字はダミーです
スクロールは出ず、ボード内の文字は12px以上のままです。その代わり、AとBの高さは手本より低くなりました。
本物のブラウザの窓を1440×900にしての確認はできていません。アドレスバーなどのブラウザの枠まで含めて900pxの場合は、高さが足りません。
手順6 全月を照合する
全10か月の数字を、正解値と比べました。上の4行は直し1回目の照合、最後の行は直し2回目の照合です。同じ数字を重ねて数えている所があるので、件数は足し合わせないでください。
| 確かめた範囲 | 方法 | 件数 | 不一致 |
|---|---|---|---|
| KPI、C、D、90分以上の席、期間など | 画面の文字を読み取って比較 | 826 | 0 |
| 1回あたりの前月比 | 同上 | 9 | 0 |
| Bの全マス、Dの棒 | 画面の写真を読み、書き起こして比較 | 630 | 0 |
| Aの昼、夜、合計 | 説明の箱の文字を読んで比較 | 30 | 0 |
| 説明の箱の文字(最後に作り直した分) | 実行された式を全10か月に広げて比較 | 810 | 0 |
最後の行は式の確認です。画面の説明の箱を全部読んだものではありません。画面では、Aを10か月(5〜8月は途中まで)、B、C、Dを9月で確認しました。
直し2回目では、棒やマスの数字の出し方は変えていません。そのため全10か月はやり直さず、2026年9月、3月、2025年12月の3か月を画面で確かめ、不一致は0件でした。
採点の結果
採点役はAIの2人です。作り手と製品名を伏せ、出来ばえを96点満点、手本の再現度を100点満点で採点しました。点数は写真で確認できた範囲の値です。
| 回 | かかった時間 | 必須条件 | 出来ばえ(2人分) | 再現度(2人分) |
|---|---|---|---|---|
| 初回 | 約1時間51分 | 2人とも不合格 | 43/24 | 36/37 |
| 直し1回目 | 約2時間57分 | 2人とも不合格 | 60/67 | 54/67 |
| 直し2回目 | 約1時間15分 | 2人とも合格 | 81/77 | 74/72 |
初回の時間には写真と報告の作成が約15分、直し1回目の時間にはデータ型の実験が含まれます。直し1回目で採点役の1人は、Bの空欄とCの棒の長さを減点しましたが、写真を確かめるとその欠陥はありませんでした。点数は直さず、そのまま載せています。
直し2回目で必須条件が合格になったので、ここで直しを止めました。
人がすること、AIに任せること
| 人が決めること | AIに任せる作業 |
|---|---|
| 手本と採点の物差しを決めます。 | 定義、部品、フローを画面で作ります。 |
| ログインと、接続先を確認します。 | 全月の照合と、代用の記録を行います。 |
| 残った差を許容するかを判断します。 | 途中の控えを残し、写真を撮ります。 |
うまくいかないこと
手本の一部は再現できませんでした
Aの棒に乗せたときの手の形のカーソル、棒やマスへのキーボード操作の枠、等幅数字の設定は見つかりませんでした。書体はMeiryoで代用しています。
仕組みの重なりが増えます
端の月の色は、図形とボタンで部品が6枚増えました。Bの説明の箱にも、透明な部品を重ねています。透明な部品の位置がマスとずれると、別の行の説明が出ます。今回も途中で1回起きて直しました。
画面操作は通信切れの影響を受けます
直し2回目では通信切れが4回ありました。切れたあとは、画面で状態を確かめてから続ける必要があります。
対象がない月の表示は確かめていません
「90分以上の席」の対象がない月は「−」を出す仕様ですが、10か月のデータに該当する月がなく、実際の表示は確かめていません。スマホでの表示も対象外です。
まとめ
- BOOLEANの列は、使わないならプレビューを切り、使うならSnowflakeのビューで数値に変えると読めました。
- カスタムビューを使わなくても、カスタム項目のSQL、ボード変数、フローで月の切り替えまで作れました。
- 説明の箱と1画面の収まりは、最後まで手がかかり、直し2回目でそろいました。

