テクテク日記

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

DAXの基礎_01 -DAXの前に

Power BIやExcel Power Pivotを勉強する人が最初に遭遇する難関がDAX*1です。私はよく冗談でDAXのことを

D(どう)

A(あがいても)

X(無理 ×)

と表現していますが、基礎が分からないままPower BIでメジャー*2を乱発して作ってしまうと、底なし沼に落ちてしまいます。DAXの基礎について話をしていきますが、作成したビジュアルと一緒に見ていくことが重要ですので、レポートに対する考え方も一緒に見ていきます。

何も考えずにPower BIでレポートを作ると・・

Power BI自体、難しいことをやらなければデータをインポートした後、すぐにでも簡単に可視化を行うことができます。ExcelでPivotやPivotチャート等を作るのと同じ感覚でレポートを作る分には、Power BIは非常に使い勝手が良いと感じるはずです。

下図はPower BIの基礎であるデータモデルを構築し、何も考えずに各テーブルにある項目で在庫・売上観測用のレポートを作ったものです(注:Power BIの初期設定で作っており、フォントサイズ、カラー、タイトルの配置等、一切変更をしていない)

初心者の場合、レポートの配置、使用チャート・テーブル等、これらを作るのにもっと時間は掛かると思いますが、慣れている人であれば3~5分でざっくりこのようなレポートを作成することができます。

f:id:marshal115:20211106163233p:plain

f:id:marshal115:20211106163310p:plain注: Sales=売上実績テーブル、Inv=在庫実績テーブル、dProduct=商品マスタ、dCalendar=日付テーブル。d=Dimの略で、Dimension(チャートやテーブル等で使用する項目)テーブルに相当

ぱっと見、良さげなレポートですが、複数の落とし穴が存在しています。まずは、左上の「倉庫による在庫数」という積み上げ棒グラフですが、タイトルに関する細かいツッコミは抜きにして、いきなり間違った結果のグラフを作ってしまいました。

f:id:marshal115:20211106164612p:plain

グラフによる可視化は情報伝達が早く、確かに非常に有効な手段でBIを活用して探索的分析を行う際に最も威力を発揮するものですが、間違いに気づかないことも多い。上図はまさにその典型例であり、これだけ見ると

在庫数が自社倉庫で約70万点、B品倉庫(不良倉庫)で微量

という結果に。これを持って上司やチームに報告した場合、経験不足として一蹴されることになることは間違いありません。

ここで「間違った結果のビジュアル」という表現をしていますが、使っているビジュアルが間違っているのではなく、数字が間違っているということを理解して下さい。

※ ビジュアルやレポートの作り方について、英語が得意な方はぜひ下記無料のMicrosoft LearnにてPeter Myersさんの力作であるPower BIの効果的なレポートデザインというコンテンツを最後まで観てみることをお勧めします。やや中上級者向けですが、様々な側面を考慮した非常に洗練されたレポートの作成Tipsが多く載っています

docs.microsoft.com

話を戻して、数字が間違っているというのは恐らく、上記の積み上げ棒グラフを見ても分からないでしょう。数字センスのある人や在庫担当者であれば、月次在庫の数量がおかしいことにすぐに気づくかもしれませんが、そうでない人(金額にしか興味がない人等)はこれに気づくことは至難の業です。

それでは、数字をテーブル形式にして分かりやすく分解してみます(下図)。

f:id:marshal115:20211106170605p:plain

注目すべきは一番下の合計ですが、上述の通り、自社倉庫では約70万点の在庫が見えています。在庫というものに詳しくない人はそもそも厳しいですが、

在庫は現預金等と同じく、残高ベースで考える

つまり、在庫は売上とは違い、BS(貸借対照表)にある資産であるため、

在庫は時系列(年月日)で単純合計はできない

ものです。ということは上図の「倉庫による在庫数」は普通に考えた場合、直近の残高で表現されるべきであり、直近が2021-03であることから、倉庫にある在庫数量は2.4万点が正しい数字となります。

フローとストックの考え方になりますが、フローは売上関連(PL(損益計算書))、ストックは在庫・資産(BS)となります。財務諸表分析が分かっていればどうってことないですが、まずPower BIを使う以前の問題で

データについてしっかり吟味する

ことが何よりも大事です。その意味で、実は右下の表の在庫数も間違っていることになります。ただし、数量(=売上数量)と売上高は正しい数字になっており、製品G(グループ)別に構成が見えるようになっています。

f:id:marshal115:20211106171601p:plain

何をフィルターしているのか

ここまで解説してた通り、「Power BI上に思いつくままレポートを作れば終わり」というのは非常に危険な考え方で、使用しているデータの特性を理解することが重要です。これと同程度に重要な概念の1つが、

作ったビジュアル(チャートやテーブル)のフィルター条件を理解する

ことです。少し分かりにくい表現ですが、要するに今見えているビジュアルは

  1. どの時点の数字
  2. 何によって構成されているか

という質問に答えられるかどうかが重要となります。1と2のことをフィルター条件と呼んでいますが、Power BIを使いこなしてくると自然に自問自答することになります。先ほどのテーブルを例にとってみましょう。

Q: 「在庫数」「数量」「売上高」のフィルター条件は?

f:id:marshal115:20211106173339p:plain

答え

1(どの時点)=観測期間全て(2018-09~2021-03までの31ヵ月)

2(何によって)=製品Gのそれぞれ or 合計

レポート作成に慣れていない人の多くがこの2点について質問されて初めて、意識するようになると思います。繰り返しになりますが、

自分の作ったレポートが果たしてチームが観たい数字になっているか、正しい数字で構成されているか

というのを常に考えることが重要です。

それでは、以下ではどうでしょうか?

f:id:marshal115:20211106174314p:plain

ここで留意すべきは左下の2021-02と2021-03が選択されていることで、答えとして

在庫は間違った数字、売上は上記2ヵ月の合計

となります。一番左の年月を選択できるアイテムはスライサーというビジュアルで、様々な切り口(年月、商品、拠点等)から数値をフィルターできるものです。BIレポートでの使用頻度はほぼ100%になりますので、名称を覚えておくことは重要です。

続けて2021-03だけを選択した場合の結果を見てみます。

f:id:marshal115:20211106174927p:plain

前の例とは違い、2021-03という年月を選んだ瞬間、全てのビジュアルは正しいものとなりました。これは、今まで在庫について複数の月を選択した場合は合計値となっていましたが、1ヵ月のみであればその月の在庫数が正しく抽出されるようになるためです。

では、スライサーを使って、全て単月で選択してしまえば良いのではないかという考えも出てくると思いますが、以下の質問に答えられるでしょうか。

  1. 売上は何か月分のものを見たいか?2021-03を選んだ状態で直近1年分の売上を見たい場合、上図のドーナツチャートやテーブル内の売上関連数字は間違ったもの(1ヵ月しかないため)になる
  2. 2021-03を選択した場合、右上のチャートが時系列ではなく単月になっている。これでは時系列チャートとしての役割を果たさないのでスライサーで複数選択したほうが良い?
  3. 2のように、複数選択した場合、再び在庫数が合計されてしまうので、結局は間違った結果を表示してしまう?

もうお分かりだと思いますが、Power BIではあることを実現しようとしてスライサーでコントロールしようとすると、BS数字とPL数字が混在したモデルの場合、ほぼ実現不可能です。これは、スライサーを使って様々な切り口から正しく数字分析を行う場合、DAXを必ず使う必要があるためです。

DAXを使って正しくメジャーを記述すると、スライサーの動きに関わらず自分の期待する結果が返ってきます。ただし、実現しようとしていることを理解していることが前提で、何となく〜で進んでしまうと、大変なことになるかもしれません。DAXについては次回紹介していきたいと思います。

まとめ

  • Power BIはデータモデルさえしっかり構築できていれば、手軽にレポートを作成することが可能
  • BS・PLの数字が混在した場合、DAXを使わずにレポートを作ることはできない
  • どんなに素晴らしい見栄えのレポートを作ったとしても、数字が間違っていたら意味がない
  • レポートを作るとき、数字を構成する要素について気を付けるべきポイントは2つ(WhenとWhat)

*1:Data Analysis eXpressionの略で、Power BIの言語。こちらを使って様々な計算指標(メジャー)を作っていく

*2:DAXで作られた計算指標。簡単なものから複雑なものまであらゆる計算を行うことが可能