テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

Bravo for Power BIの活用例

先日、SQLBIよりBravo for Power BIという新しいツールが紹介されました。今回はこのツールを使って、さくっとデータモデルの構築及び時系列分析ができてしまうことを紹介したいと思います。紹介ビデオは以下の通りですが、Marcoさんが丁寧に機能を簡単に解説してくれています。


www.youtube.com

Bravo for Power BIのインストール

ダウンロードへのリンクは下記の通りですが、ブラウザのURLにbravo.biを入力すればサイトへ行けるようになります。

bravo.bi

リンク先のサイトは英語ですが、ダウンロードアイコンを辿って、下記64bit版をインストールしてください。

f:id:marshal115:20220331172529p:plain

インストーラーは英語になっていますが、次への連打で最後まで行けます。

サンプルデータ

Bravo for Power BIはインストールすれば、既に構築済みのPower BI Desktopファイルを使って、外部ツール(External Tools)として使用できますが、今回はそんなデータを持っていない人、あるいは、ゼロからデータモデルを構築してみたい方向けにやり方、留意点について解説をしていきたいと思います。

サンプルデータは以下Microsoft Learnより抜粋しています。

演習 – Power BI でデータを視覚化する - Learn | Microsoft Docs

リンク先にはサンプルデータのソースが3つあり、以下それらを抜粋してきたものとなります。

  • サンプルデータ
https://github.com/MicrosoftLearning/DP-900T00A-Azure-Data-Fundamentals/raw/master/power-bi/customers.csv
https://github.com/MicrosoftLearning/DP-900T00A-Azure-Data-Fundamentals/raw/master/power-bi/products.csv
https://github.com/MicrosoftLearning/DP-900T00A-Azure-Data-Fundamentals/raw/master/power-bi/orders.csv

全てGitHub上に格納されているサンプルデータですが、上記URLのどれでも良いので、ブラウザに張り付けてあげると、以下のようなCSV形式のデータが出現します。

f:id:marshal115:20220331173612p:plain

これをPower BIで取得していき、Bravo for Power BIでどのようなことができるかを見ていきます。

Power BIによるデータの取得

以下、Power BIでデータを取得していきます。

  1. 空のPower BI Desktopを立ち上げます

    f:id:marshal115:20220331174236p:plain

  2. ファイル > オプションと設定 > オプションより、以下のようにA(グローバル)とB(現在のファイル)のそれぞれから、「タイム インテリジェンス」の下にある項目のチェックを外す(※重要:これをやらないと、Bravoを使うことができません)

    f:id:marshal115:20220331174653p:plain

    Power BIで新しくモデルを構築する際、「自動の日付/時刻」のチェックを外しておくのがベストプラクティスになりますが、詳細は下記ガイダンスをご参考ください。

  3.  ホーム > データを取得(右側にある下矢印) > Web

    f:id:marshal115:20220331175703p:plain

  4. 上記URLを1つコピペ

    f:id:marshal115:20220331175841p:plain

  5. 初めて接続を行う場合、下記ウィンドウが出現すると思いますので、匿名 > OKとクリックしていきます

    f:id:marshal115:20220331180212p:plain

  6. プレビュー画面が出ますので、「データの変換」をクリック

    f:id:marshal115:20220331180500p:plain

  7. customer(ディメンション)テーブルがクエリとして抽出される

    f:id:marshal115:20220331180556p:plain本来であれば、ステップ4へ戻り、他の2つのリンク先に対しても同じことを行いますが、ここではクエリを複製してほかの2つのデータを取得してみたいと思います。

  8. 上図の状態から、customerをdCustomerへ名前を変更し、そのまま右クリック > 複製(d○とした理由は、d=Dimensionを意味しており、このクエリがFactテーブルでないことを明確にしたもの。テーブルのネーミングルールは各自あると思いますが、今回のデモではこのようにしていきます)

    f:id:marshal115:20220331181250p:plain

    ここから、更に以下①~④のように変更していきます。

    f:id:marshal115:20220331181617p:plain

  9. productsのデータを抽出できましたが、Column4とColumn5が余計な列として出現

    f:id:marshal115:20220331181743p:plain
    余計な列が出現した原因はCsv.DocumentにおけるパラメータColumns = 5のせいであり、このパラメータ自体を削除する

    f:id:marshal115:20220331182138p:plain

  10.  ここでクエリをそのまま最後のステップまでもっていくと、以下のエラーが出現するので、最後のステップを削除する

    f:id:marshal115:20220331182846p:plain

    更に下記の順番でもう一度データ型を設定しなおす

    f:id:marshal115:20220331183013p:plain

    最後にクエリ名を変更

    f:id:marshal115:20220331183159p:plain

  11. dProductを複製し、ソースのアドレスの部分のproductsをordersに変更。列が全て抽出されるが、データ型のエラーが発生しますので、上記①~⑤まで繰り返し、最後にordersをSalesへ名称変更

    f:id:marshal115:20220331183542p:plain

  12.  ホーム > 閉じて適用(下図)

    f:id:marshal115:20220331183647p:plain

なお、最後に、Power BI Desktopのモデルビュー(下図)を見ると、リレーションシップが自動的に構築されています。

f:id:marshal115:20220331184146p:plain

下記オプションの赤枠内に☑が入っている場合、リレーションシップが自動的に構築されるようになっています。

f:id:marshal115:20220331184035p:plain

リレーションシップが構築されていない(=上記☑が外れていた)場合は以下のように簡単に設定が可能です。

f:id:marshal115:20220331184551p:plain

f:id:marshal115:20220331184601p:plain

メジャーの記述

これでデータモデルを一から作ることができましたが、Bravo for Power BIを立ち上げる前に、まずはBaseメジャーをSalesテーブルに記述していきます。

  • SalesAmt(売上高)
 SalesAmt = SUM( Sales[Revenue] )
  • SalesQty(売上数量)
 SalesQty = SUM( Sales[Quantity] )

次に、FactテーブルであるSalesにある全ての列を以下①~③の順番で非表示していきます。

f:id:marshal115:20220331185352p:plain

最終的に、Salesテーブルは以下のようになります。

f:id:marshal115:20220331185433p:plain

Bravo for Power BIの使用

ようやく、Bravoを使う前準備が終わりました。念の為、Power BI Desktopファイルを保存しておきましょう(今回のデモでは「Demo_Bravo.pbix」とします)。Bravoがインストールされていれば、外部ツール > Bravoと立ち上げることが可能となります。

f:id:marshal115:20220331185935p:plain

立ち上げ後、以下のような画面が出現します。

f:id:marshal115:20220331190101p:plain

今回は、各機能について説明する記事ではないため、さっそく対象のタブ(Manage Dates)をクリックして、日付テーブルの設定および作成を行います(下図)。

f:id:marshal115:20220331190449p:plain

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はまだサポートされていない)。

f:id:marshal115:20220331191346p:plain

Preview Changesをクリックし、出現ウィンドウが以下のようになっていることを確認して、右下のApply Changesをクリック。

f:id:marshal115:20220331225139p:plain

成功すれば下記のように✅が出現します。

f:id:marshal115:20220331191645p:plain

Power BI Desktopへ戻ると、フィールドペインに以下のフォルダやテーブルが追加されていることが確認できます。特にDateテーブルは作るのが面倒ですので、Bravoのこの機能はまさにBravo!です。

f:id:marshal115:20220331192004p:plain

ここで、モデルビューへ行くと、DateテーブルとDateAutoTemplateという2つのテーブルが追加されていますので、Dateテーブルのほうで、Salesテーブルとリレーションシップを作ります。なお、後でDateAutoTemplateのテーブルを少し調整する必要があります。

f:id:marshal115:20220331192102p:plain

これで一通り完成ですので、最後にDAXと可視化について見ていきます。

DAXと可視化

今回はゼロからPower BI Desktopでデータモデルを作ることが目的となりますが、気づいたらそれが完了していました。Baseメジャーは[SalesQty]と[SaleAmt]の2つと少ないですが、前述のDateテーブルが自動的にDAXで構築されると共に、下図のように、これらBaseメジャーに対して、時系列計算メジャーも自動的に計算された状態となります。

f:id:marshal115:20220331225724p:plain

上図を見れば分かりますが、Baseメジャーが多いほど、時系列メジャーは増えることになります。ただし、ここで気を付けないといけないのは、今回自動生成された時系列メジャーは売上や仕入等のフローデータに限られることであり、例えば在庫、銀行残高、MAU(Monthly Active Users)等といった年月日で合計できないメジャーには使用できないことです。

そのため、(少し戻りますが)Bravoの画面で予めTime Intelligenceというタブから、時系列メジャーとして作りたいBaseメジャーを選んでおくと良いでしょう(今回は全てがフローデータになるので、敢えてここを触らなくてもOK)。

f:id:marshal115:20220401120823p:plain

f:id:marshal115:20220401120833p:plain

それでは話を戻して、可視化とDAXのポイントについて見ていきます。

ポイント1: 時系列チャートの単位調整

まず、時系列チャートを2つ作ってみます。

軸: Date[Date]をドラッグ&ドロップ

値:[SalesAmt]をドラッグ&ドロップ

f:id:marshal115:20220331231728p:plain

上が積み上げチャート、下がラインチャートとなりますが、年月日という粒度のDate[Date]列を使用していることもあり、やや見にくい状態となっています。時系列チャート作成時のテクニックの1つですが、粒度の細かい日付で可視化する場合、

軸(Date)の上に日付型の年月の初日(Start of Month)を入れる

ことで、階層が変わりグラフが一気に見やすくなります。

すなわち、Dateテーブル内にStart of Monthという列があれば良いのですが、残念ながら、Bravoによって自動生成されたこのテーブル内にこれはありません。また、データビューにてDateテーブルを見ると、DateAutoTemplateというテーブルを参照しているのが分かります。

f:id:marshal115:20220331232104p:plain

Start of Monthメジャーを追加するため、DateAutoTemplateのほうを修正してみます。DateAutoTemplateテーブルは非表示テーブルとなっているため、まずはこれを表示させます。

f:id:marshal115:20220331232522p:plain

表示された後、データビューでDateAutoTemplateテーブルをクリックすると、ドキッとするくらい難しそうなDAXで記述された計算テーブルを垣間見ることができます。

f:id:marshal115:20220331232712p:plain

非表示にしている理由の1つが恐らくこれであり、Bravoは初心者が素早くデータモデルを構築できる一方、自動化の背後にはこのようなDAX式が隠されているのです。とはいえ、これらのDAX式はSQLBIがDAX Patternsで教えているやり方であり、興味ある人は下記を覗いてみてください。

さて、ここでこのDAX式を少し変更します。まずは、Aprilを指定したのに、なぜか__FirstFiscalMonth = 3と出てしまうので、これを4に変更し、4月~3月という会計年度に変更します。
※ 2022/4/1時点 バグであることが判明。4/6時点では修正済。

f:id:marshal115:20220331234230p:plain

次に、以下のように、21~22行目にStart of MonthとEnd of Monthを入れ、更にその下のRETURN ROWステートメントの直後にも同じように追加します。

f:id:marshal115:20220331234659p:plain

ここでDateテーブルに戻ると、以下のように月初と月末のそれぞれが列として追加されているのが分かります。

f:id:marshal115:20220331234926p:plain

f:id:marshal115:20220331235040p:plain

無事追加が完了したことを確認して、先ほどの積み上げチャートとラインチャートの軸にドラッグ&ドロップしてみます。

f:id:marshal115:20220331235428p:plain

先程とは違い、かなり分かりやすい粒度での可視化になったのではないかと思います。さらに、1ヵ月ベースでドリルダウンもできるようになります。

f:id:marshal115:20220401005534p:plain

ただ、見ての通り、あまり美しいものではないため、細かいところまで見たい場合、Date関連のスライサーを配置して、ピンポイントでフィルターしたほうが良いでしょう(下図)。

f:id:marshal115:20220401010043p:plain

もう一つここでの留意点として、上記チャートは必ずStart of Monthを使う必要があることです。例えば、End of Monthを使った場合、グラフと年月のラベルは1ヵ月ズレた状態で見えてしまいますので、ミスリーディングな結果を招いてしまいます。

f:id:marshal115:20220331235945p:plain

ポイント2: _ShowValueForDatesの不備

_ShowValueForDatesは日付テーブルが12月31日まで伸びていた場合、YTD(年間累積)等の売上が売上実績がない年月まで伸びてしまうことを防ぐための非表示用メジャーとなります。

www.daxpatterns.com

このメジャーを使用しなかった場合のYTD SalesAmt(こちらはBravoによって自動生成)は以下の通りですが、実は執筆時点ではこの_ShowValueForDatesがDAX式に織り込まれているものの、うまく機能していない状態です
※ 2022/4/1時点 バグであることが判明。4/6時点では修正済。

f:id:marshal115:20220401114606p:plain

ということで、この_ShowValueForDatesを少し書き換えます。まずは、このメジャーをアクティブにします。

f:id:marshal115:20220401114141p:plain

次に、メジャーを書き換えます。

f:id:marshal115:20220401114124p:plain

これで、上記のテーブルとチャートは以下のようにすっきりとして形になりました。

f:id:marshal115:20220401114702p:plain

※ 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に置き換わるものではなく、痒いところに手が届くような(グラフィカルで少しカッコい)ツールであるようです。初心者向けと言えばそうかもしれませんが、玄人でも使用できるツールであると言えます。まだバグが存在していますので、定期的にツールの更新をすると良いでしょう。