MotionBoard

AIでMotionBoardのダッシュボードを作る手順|Snowflakeの対応していないデータ型への対処

Ryosuke Ishii

今回は、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)。この画面にどこまで近づけるかを測りました。数字はダミーです

完成した画面

MotionBoardで作った月次売上ダッシュボード

図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,8137,813
予約あり 真/偽/空79/7,734/079/7,734/0
返金あり 真/偽/空0/7,583/2300/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 手本に寄せる

初回の画面は、数字は正しかったものの、推移線や凡例などが入っておらず、素の項目名も残っていました。

初回の画面。Cの見出しとDの表に素の項目名と余分な部品が残っている

図2:初回の画面。数字はダミーです

動かなかったところと代わりの方法

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

説明の箱は、Aで次の形になりました。

Aの説明の箱

図3:Aの棒に乗せたときの説明の箱。数字はダミーです

先頭の「夜:」は棒の区分そのものの文字で、色の条件にも使っているため残りました。文章の項目は、SQLの書き方を3回やり直しています。相関サブクエリなどでは通らず、1か月1行の文字を作って引く形で動きました。

手順5 上の帯を含めて1画面に収める

閲覧画面には、MotionBoardの上の帯が約40pxあります。1440×900で作ったボードは、1440×900の表示領域ではこの分あふれます。

次の順に試しました。

試したこと結果
ボード設定で帯を隠す編集できる人の画面では帯が残りました。設定が効くのは編集できない人です。
ページ設定「ウィンドウの高さに合わせる」スクロールは消えますが、下が切れました。
下の部品を28px上げ、AとBの高さを詰める全部収まりました。
上の帯を含めて1440×900に収まった画面

図4:アプリの外枠を1440×900に縮めて確かめた画面。数字はダミーです

スクロールは出ず、ボード内の文字は12px以上のままです。その代わり、AとBの高さは手本より低くなりました。

本物のブラウザの窓を1440×900にしての確認はできていません。アドレスバーなどのブラウザの枠まで含めて900pxの場合は、高さが足りません。

手順6 全月を照合する

全10か月の数字を、正解値と比べました。上の4行は直し1回目の照合、最後の行は直し2回目の照合です。同じ数字を重ねて数えている所があるので、件数は足し合わせないでください。

確かめた範囲方法件数不一致
KPI、C、D、90分以上の席、期間など画面の文字を読み取って比較8260
1回あたりの前月比同上90
Bの全マス、Dの棒画面の写真を読み、書き起こして比較6300
Aの昼、夜、合計説明の箱の文字を読んで比較300
説明の箱の文字(最後に作り直した分)実行された式を全10か月に広げて比較8100

最後の行は式の確認です。画面の説明の箱を全部読んだものではありません。画面では、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/2436/37
直し1回目約2時間57分2人とも不合格60/6754/67
直し2回目約1時間15分2人とも合格81/7774/72

初回の時間には写真と報告の作成が約15分、直し1回目の時間にはデータ型の実験が含まれます。直し1回目で採点役の1人は、Bの空欄とCの棒の長さを減点しましたが、写真を確かめるとその欠陥はありませんでした。点数は直さず、そのまま載せています。

直し2回目で必須条件が合格になったので、ここで直しを止めました。

人がすること、AIに任せること

人が決めることAIに任せる作業
手本と採点の物差しを決めます。定義、部品、フローを画面で作ります。
ログインと、接続先を確認します。全月の照合と、代用の記録を行います。
残った差を許容するかを判断します。途中の控えを残し、写真を撮ります。

うまくいかないこと

手本の一部は再現できませんでした

Aの棒に乗せたときの手の形のカーソル、棒やマスへのキーボード操作の枠、等幅数字の設定は見つかりませんでした。書体はMeiryoで代用しています。

仕組みの重なりが増えます

端の月の色は、図形とボタンで部品が6枚増えました。Bの説明の箱にも、透明な部品を重ねています。透明な部品の位置がマスとずれると、別の行の説明が出ます。今回も途中で1回起きて直しました。

画面操作は通信切れの影響を受けます

直し2回目では通信切れが4回ありました。切れたあとは、画面で状態を確かめてから続ける必要があります。

対象がない月の表示は確かめていません

「90分以上の席」の対象がない月は「−」を出す仕様ですが、10か月のデータに該当する月がなく、実際の表示は確かめていません。スマホでの表示も対象外です。

まとめ

  • BOOLEANの列は、使わないならプレビューを切り、使うならSnowflakeのビューで数値に変えると読めました。
  • カスタムビューを使わなくても、カスタム項目のSQL、ボード変数、フローで月の切り替えまで作れました。
  • 説明の箱と1画面の収まりは、最後まで手がかかり、直し2回目でそろいました。

関連する記事

ABOUT ME
石井 亮介(りょうさん)
石井 亮介(りょうさん)
データパレード 代表取締役
㈱データパレードの代表取締役で、高田馬場の町中華「一番飯店」のChief Data Officerも務めています。BIツールのセールスエンジニア・システムエンジニア・カスタマーサクセス歴15年。大学のデータサイエンス教育で講師も担当してきました。現在は自社業務のほとんどをAIに移管し、AI10部署と50を超える自動処理が24時間動く「AI経営」を実践中。その実践知をこのブログで発信しています。
記事URLをコピーしました