DAX> ISONORAFTER関数で累計値グラフを作る方法|IT小技11

累計グラフを作る時の課題と対策イメージ
目次

この記事で分かること

Power BIで累計値を正しくグラフ化する方法を解説します。

「クイックメジャーを使ったのに、思うように累計が出ない…」という経験はありませんか?

本記事では一例としてクイックメジャーでは月初でリセットされる不具合事例を取り上げます

そして、DAXのISONORAFTER関数を中心に、CALCULATE関数、SUM関数、FILTER関数、ALLSELECTED関数の組み合わせを使って、累計計算の困り事を解決します

「何故そうなるのか?」を具体的なグラフと式で丁寧に解説します。

課題|累計値グラフを作る難しさ

今回の課題は「累計計算」です。
Power BIではクイックメジャー機能を使えば簡単に累計を作れますが、月初で先月までの累計がリセットされる事例があります。

以下の模擬データのグラフ化を題材にして具体的に説明します。

模擬データについて

今回使用するデータは次のとおりです。

日付列:2024年1月初め~2025年2月末までを日単位で入力
値列:1からの連番

日付列と値列があるデータテーブル

グラフについて

目指すグラフは以下※1~※3です
※1:横軸に年月
※2:縦軸の第一軸に合計をとった「棒グラフ」
※3:縦軸の第二軸に累計をとった「線グラフ」

まずは正解グラフを示します。

正解の累計グラフ

続いて、クイックメジャーで累計を作った場合の不正解グラフです。

不正解の累計グラフ

月初めでリセットされているため、線グラフと棒グラフが同じ値になっています。

クイックメジャーは下図の通り設定しました。

クイックメジャーに配置したパラメータ

メジャー式に見慣れないISONORAFTER関数が使われています。これを色々調べてハマった人がいるかもしれません。

「見慣れない」と書いたのは、”累計計算以外では使ったことがない”という私の経験則です

しかしISONORAFTER関数の誤りではなく、ALLSELECTED関数の使い方に原因があります。

答え|ISONORAFTER関数が理解できなくても累計メジャーは作れる

結論から言うと、ISONORAFTER関数を完全に理解していなくても累計メジャーは作成できます
すなわち以下の累計メジャーです。

累計メジャー =CALCULATE(
 SUM(Data[値]),
  FILTER(
   ALLSELECTED(‘Data’),
    ISONORAFTER(
     ’Data'[年月日],
     MAX(‘Data'[年月日]),
     DESC
    )
  )
 )

クイックメジャーで自動生成される式では、

ALLSELECTED(‘Data'[年月日])

となっていますが、これを

ALLSELECTED(‘Data’)

変更するだけでOKです。

つまり、ISONORAFTER関数を理解していなくても、この一か所の修正で累計グラフは正しく動作します。

解説|ISONORAFTER関数を含めて累計メジャーを理解しよう

なぜクイックメジャーでは上手くいかないのか?

横軸を「年月」にしたグラフでは、ALLSELECTED(‘Data'[年月日]) が各月単位でフィルタされるため、前月以前のデータが計算対象に含まれません。

その結果、各月が独立して集計され、累計にならないのです。

ただし、クイックメジャーでもカードビジュアルなら正しく動作します。何故ならカードは「年月でフィルタされない」ビジュアルだからです。

累計メジャー式の詳細解説

式の構造を順に分解して理解してみましょう。

CALCULATE関数
集計の文脈(フィルターコンテキスト)を再定義する関数です。累計や条件付き合計ではほぼ必須です。

SUM(Data[値])
「値」列の合計を取ります。ここでは累計の基本単位です。

FILTER関数
ALLSELECTEDで取得した全データの中から、条件に一致する行を抽出します。

ALLSELECTED(‘Data’)
現在のフィルタ選択を保持したまま、全体のテーブルを対象とします。
繰り返しますが、グラフの場合、’Data'[年月日]にしてしまうと、月ごとのフィルタが働いて前月が除外されます。

ISONORAFTER関数
指定した列が「指定した値以降」であるかを判定します。

今回の場合、以下の通りです。
指定した列=’Data'[年月日]
指定した値=MAX(‘Data'[年月日]) グラフの各月の最大値(30日とか31日。2月なら28日、29日)

そしてDESCを引数にすることで、新しい日付から数えて、指定した値以降(つまり指定した値より過去)の値に対して条件TRUEを返します。

後はこれをFILTER関数の条件抽出に使うことで、TRUEとなる日付のみを集計対象にします。

まとめ

  • クイックメジャーでの累計がリセットされる原因は、ALLSELECTED(‘Data'[年月日]) にありました。
  • 修正点はたった1か所、ALLSELECTED(‘Data’) に変えるだけでOKです。
  • ISONORAFTER関数は**「指定した値以降を含む」**という条件を設定する関数で、累計計算ではよく使われます。
  • CALCULATE・FILTER・ALLSELECTEDの理解が進むと、より柔軟なDAX設計が可能になります。

Power BIの累計計算に悩んだときは、今回の方法をぜひ参考にしてみてください(終わり)。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

 氷河期世代SEです。ITなどに関するマメ知識から、氷河期世代の生き方まで、読者に役立つ情報を発信します。
 仕事では資格を持たず、師匠もいない環境で身に付けた独学スキルだけが武器です。群れを嫌う一匹狼、いや狼ほど強くないので一匹猫(Lone Cat)として生きています。
 家庭では46歳で第一子、48歳で第二子を授かり、晩婚夫婦が子育て奮闘中です。趣味は料理、自動車、歴史、グルメ、温泉など幅広く色々やってます。
 2025年にブログをはじめました。老眼と同時デビューです。

コメント

コメントする

CAPTCHA


目次