先日、SQLBIよりBravo for Power BIという新しいツールが紹介されました。今回はこのツールを使って、さくっとデータモデルの構築及び時系列分析ができてしまうことを紹介したいと思います。紹介ビデオは以下の通りですが、Marcoさんが丁寧に機能を簡単に解説してくれています。
Bravo for Power BIのインストール
ダウンロードへのリンクは下記の通りですが、ブラウザのURLにbravo.biを入力すればサイトへ行けるようになります。
リンク先のサイトは英語ですが、ダウンロードアイコンを辿って、下記64bit版をインストールしてください。
インストーラーは英語になっていますが、次への連打で最後まで行けます。
サンプルデータ
Bravo for Power BIはインストールすれば、既に構築済みのPower BI Desktopファイルを使って、外部ツール(External Tools)として使用できますが、今回はそんなデータを持っていない人、あるいは、ゼロからデータモデルを構築してみたい方向けにやり方、留意点について解説をしていきたいと思います。
サンプルデータは以下Microsoft Learnより抜粋しています。
演習 – Power BI でデータを視覚化する - Learn | Microsoft Docs
リンク先にはサンプルデータのソースが3つあり、以下それらを抜粋してきたものとなります。
- サンプルデータ
全てGitHub上に格納されているサンプルデータですが、上記URLのどれでも良いので、ブラウザに張り付けてあげると、以下のようなCSV形式のデータが出現します。
これをPower BIで取得していき、Bravo for Power BIでどのようなことができるかを見ていきます。
Power BIによるデータの取得
以下、Power BIでデータを取得していきます。
- 空のPower BI Desktopを立ち上げます
- ファイル > オプションと設定 > オプションより、以下のようにA(グローバル)とB(現在のファイル)のそれぞれから、「タイム インテリジェンス」の下にある項目のチェックを外す(※重要:これをやらないと、Bravoを使うことができません)
Power BIで新しくモデルを構築する際、「自動の日付/時刻」のチェックを外しておくのがベストプラクティスになりますが、詳細は下記ガイダンスをご参考ください。
- ホーム > データを取得(右側にある下矢印) > Web
- 上記URLを1つコピペ
- 初めて接続を行う場合、下記ウィンドウが出現すると思いますので、匿名 > OKとクリックしていきます
- プレビュー画面が出ますので、「データの変換」をクリック
- customer(ディメンション)テーブルがクエリとして抽出される
本来であれば、ステップ4へ戻り、他の2つのリンク先に対しても同じことを行いますが、ここではクエリを複製してほかの2つのデータを取得してみたいと思います。
- 上図の状態から、customerをdCustomerへ名前を変更し、そのまま右クリック > 複製(d○とした理由は、d=Dimensionを意味しており、このクエリがFactテーブルでないことを明確にしたもの。テーブルのネーミングルールは各自あると思いますが、今回のデモではこのようにしていきます)
ここから、更に以下①~④のように変更していきます。
- productsのデータを抽出できましたが、Column4とColumn5が余計な列として出現
余計な列が出現した原因はCsv.DocumentにおけるパラメータColumns = 5のせいであり、このパラメータ自体を削除する - ここでクエリをそのまま最後のステップまでもっていくと、以下のエラーが出現するので、最後のステップを削除する
更に下記の順番でもう一度データ型を設定しなおす
最後にクエリ名を変更
- dProductを複製し、ソースのアドレスの部分のproductsをordersに変更。列が全て抽出されるが、データ型のエラーが発生しますので、上記①~⑤まで繰り返し、最後にordersをSalesへ名称変更
- ホーム > 閉じて適用(下図)
なお、最後に、Power BI Desktopのモデルビュー(下図)を見ると、リレーションシップが自動的に構築されています。
下記オプションの赤枠内に☑が入っている場合、リレーションシップが自動的に構築されるようになっています。
リレーションシップが構築されていない(=上記☑が外れていた)場合は以下のように簡単に設定が可能です。
メジャーの記述
これでデータモデルを一から作ることができましたが、Bravo for Power BIを立ち上げる前に、まずはBaseメジャーをSalesテーブルに記述していきます。
- SalesAmt(売上高)
- SalesQty(売上数量)
次に、FactテーブルであるSalesにある全ての列を以下①~③の順番で非表示していきます。
最終的に、Salesテーブルは以下のようになります。
Bravo for Power BIの使用
ようやく、Bravoを使う前準備が終わりました。念の為、Power BI Desktopファイルを保存しておきましょう(今回のデモでは「Demo_Bravo.pbix」とします)。Bravoがインストールされていれば、外部ツール > Bravoと立ち上げることが可能となります。
立ち上げ後、以下のような画面が出現します。
今回は、各機能について説明する記事ではないため、さっそく対象のタブ(Manage Dates)をクリックして、日付テーブルの設定および作成を行います(下図)。
Manage Dateタブで設定されたものは、DAXで日付テーブルとして、Power BIのデータモデルとして追加されますので、ここでは上記A~Cの設定について行います。
A: Calendar Template
Standardにすれば、DATEADD等のTime Intelligence関数が使用されるDateテーブルが作られます
B: First Month of the Year
会計年度用の最初の月。日本の場合、3月が年度末の決算月であることが多いので、デモではAprilを選びます
C: First Day of the Week
Outlookの予定表等では、日曜日が一番最初に来ていますが、月曜日が週の始まりという認識が強いと思いますので、ここではMondayを指定します
最後にHolidaysのタブをクリックし、OFFにしておく(当記事時点、日本のHolidaysはまだサポートされていない)。
Preview Changesをクリックし、出現ウィンドウが以下のようになっていることを確認して、右下のApply Changesをクリック。
成功すれば下記のように✅が出現します。
Power BI Desktopへ戻ると、フィールドペインに以下のフォルダやテーブルが追加されていることが確認できます。特にDateテーブルは作るのが面倒ですので、Bravoのこの機能はまさにBravo!です。
ここで、モデルビューへ行くと、DateテーブルとDateAutoTemplateという2つのテーブルが追加されていますので、Dateテーブルのほうで、Salesテーブルとリレーションシップを作ります。なお、後でDateAutoTemplateのテーブルを少し調整する必要があります。
これで一通り完成ですので、最後にDAXと可視化について見ていきます。
DAXと可視化
今回はゼロからPower BI Desktopでデータモデルを作ることが目的となりますが、気づいたらそれが完了していました。Baseメジャーは[SalesQty]と[SaleAmt]の2つと少ないですが、前述のDateテーブルが自動的にDAXで構築されると共に、下図のように、これらBaseメジャーに対して、時系列計算メジャーも自動的に計算された状態となります。
上図を見れば分かりますが、Baseメジャーが多いほど、時系列メジャーは増えることになります。ただし、ここで気を付けないといけないのは、今回自動生成された時系列メジャーは売上や仕入等のフローデータに限られることであり、例えば在庫、銀行残高、MAU(Monthly Active Users)等といった年月日で合計できないメジャーには使用できないことです。
そのため、(少し戻りますが)Bravoの画面で予めTime Intelligenceというタブから、時系列メジャーとして作りたいBaseメジャーを選んでおくと良いでしょう(今回は全てがフローデータになるので、敢えてここを触らなくてもOK)。
それでは話を戻して、可視化とDAXのポイントについて見ていきます。
ポイント1: 時系列チャートの単位調整
まず、時系列チャートを2つ作ってみます。
軸: Date[Date]をドラッグ&ドロップ
値:[SalesAmt]をドラッグ&ドロップ
上が積み上げチャート、下がラインチャートとなりますが、年月日という粒度のDate[Date]列を使用していることもあり、やや見にくい状態となっています。時系列チャート作成時のテクニックの1つですが、粒度の細かい日付で可視化する場合、
軸(Date)の上に日付型の年月の初日(Start of Month)を入れる
ことで、階層が変わりグラフが一気に見やすくなります。
すなわち、Dateテーブル内にStart of Monthという列があれば良いのですが、残念ながら、Bravoによって自動生成されたこのテーブル内にこれはありません。また、データビューにてDateテーブルを見ると、DateAutoTemplateというテーブルを参照しているのが分かります。
Start of Monthメジャーを追加するため、DateAutoTemplateのほうを修正してみます。DateAutoTemplateテーブルは非表示テーブルとなっているため、まずはこれを表示させます。
表示された後、データビューでDateAutoTemplateテーブルをクリックすると、ドキッとするくらい難しそうなDAXで記述された計算テーブルを垣間見ることができます。
非表示にしている理由の1つが恐らくこれであり、Bravoは初心者が素早くデータモデルを構築できる一方、自動化の背後にはこのようなDAX式が隠されているのです。とはいえ、これらのDAX式はSQLBIがDAX Patternsで教えているやり方であり、興味ある人は下記を覗いてみてください。
さて、ここでこのDAX式を少し変更します。まずは、Aprilを指定したのに、なぜか__FirstFiscalMonth = 3と出てしまうので、これを4に変更し、4月~3月という会計年度に変更します。
※ 2022/4/1時点 バグであることが判明。4/6時点では修正済。
次に、以下のように、21~22行目にStart of MonthとEnd of Monthを入れ、更にその下のRETURN ROWステートメントの直後にも同じように追加します。
ここでDateテーブルに戻ると、以下のように月初と月末のそれぞれが列として追加されているのが分かります。
無事追加が完了したことを確認して、先ほどの積み上げチャートとラインチャートの軸にドラッグ&ドロップしてみます。
先程とは違い、かなり分かりやすい粒度での可視化になったのではないかと思います。さらに、1ヵ月ベースでドリルダウンもできるようになります。
ただ、見ての通り、あまり美しいものではないため、細かいところまで見たい場合、Date関連のスライサーを配置して、ピンポイントでフィルターしたほうが良いでしょう(下図)。
もう一つここでの留意点として、上記チャートは必ずStart of Monthを使う必要があることです。例えば、End of Monthを使った場合、グラフと年月のラベルは1ヵ月ズレた状態で見えてしまいますので、ミスリーディングな結果を招いてしまいます。
ポイント2: _ShowValueForDatesの不備
_ShowValueForDatesは日付テーブルが12月31日まで伸びていた場合、YTD(年間累積)等の売上が売上実績がない年月まで伸びてしまうことを防ぐための非表示用メジャーとなります。
このメジャーを使用しなかった場合のYTD SalesAmt(こちらはBravoによって自動生成)は以下の通りですが、実は執筆時点ではこの_ShowValueForDatesがDAX式に織り込まれているものの、うまく機能していない状態です。
※ 2022/4/1時点 バグであることが判明。4/6時点では修正済。
ということで、この_ShowValueForDatesを少し書き換えます。まずは、このメジャーをアクティブにします。
次に、メジャーを書き換えます。
これで、上記のテーブルとチャートは以下のようにすっきりとして形になりました。
※ Dateテーブルに関連するマニュアル調整は今後修正される可能性が高いですので、その際にはこちらの記事も修正を行う予定
予想通り、2022/4/6時点では上記のバグは修正されています。
まとめ
- 今回初回したBravo for Power BIはメタデータ解析(使用されていない列の特定やデータサイズ等)についてではなく、モデリングについて紹介したもの
- Bravoは日付テーブルを自動生成してくれるため、非常に使い勝手が良い
- 執筆時点ではまだBeta版のため、バグが複数存在している可能性が高い
- Bravoはタイムインテリジェンス関数を使用して、いくつか基礎的な時系列メジャーを自動生成してくれるため、手っ取り早く分析を始めてみたい人には朗報
- チャート作成時のテクニックの1つとして、Start of Monthを使って表現すると良い場合がある
SQLBIのMarcoさんが紹介ビデオの中で話している通り、Bravo for Power BIはDAX StudioやTabular Editorに置き換わるものではなく、痒いところに手が届くような(グラフィカルで少しカッコい)ツールであるようです。初心者向けと言えばそうかもしれませんが、玄人でも使用できるツールであると言えます。まだバグが存在していますので、定期的にツールの更新をすると良いでしょう。