#はじめに
- Power BIで棒グラフを表示するとき、パレート図で表示できると便利です。
- パレート図の累積比率算出式はクイックメジャーに用意されてないようです。
- 累積比率のDAX式で、いろいろ試行錯誤しましたが、PowerBIxyzさんより、アドバイスをいただき、対策版を改定しました。(2019.9.1)
#サンプルデータ
以下のテーブルデータを例に、パレート図を作成します。
##Table1
Category | Value |
---|---|
A | 8 |
B | 2 |
A | 3 |
B | 1 |
B | 2 |
C | 5 |
D | 3 |
#メジャーの作成 | |
モデリング>新しいメジャーより、累積比率を計算するDAX式を入力し、メジャーを作成します。 | |
##方法1 | |
参考サイト https://www.youtube.com/watch?v=bzF5kN2BQ60 |
Pareto =
VAR SummarizedTable =
SUMMARIZE(
ALLSELECTED(Table1),Table1[Category],
"Sum",SUMX(Table1,Table1[Value])
)
VAR CumulativeSum =
SUMX(
FILTER( SummarizedTable,[Sum] >= SUMX(Table1,Table1[Value]) ),
[Sum]
)
VAR Total = SUMX(SummarizedTable,[Sum])
RETURN
DIVIDE(CumulativeSum,Total)*100
上記DAX式では、カテゴリの合計が同じB,Cでは累積比率が一定となってしまうようです。
カテゴリ毎の合計が全て異なる値であれば、正しく算出されます。
##方法2(対策版)
カテゴリの合計が同じ場合に累積比率が正しく算出されるように、改良しました。
Table1
Table1[Category]
Table1[Value]
の名前を置き換えて使うことで、他のテーブル名でも利用できます。
Pareto =
VAR SummarizedTable =
SUMMARIZE(
ALLSELECTED(Table1), Table1[Category],
"Sum",SUMX(Table1, Table1[Value])
)
VAR CurrentCategory =
SELECTEDVALUE ( Table1[Category] )
VAR CurrentCategorySum =
CALCULATE ( SUM( Table1[Value] ), Table1[Category] = CurrentCategory )
VAR CumulativeSum =
SUMX (
FILTER (
SummarizedTable,
[Sum] > CurrentCategorySum
|| ( [Sum] = CurrentCategorySum
&& Table1[Category] <= CurrentCategory )
),
[Sum]
)
VAR TotalSum =
SUMX(ALLSELECTED(Table1), Table1[Value])
RETURN
100 * DIVIDE ( CumulativeSum, TotalSum )
###カテゴリの集計方法がカウントの場合
VAR SummarizedTable =... にあるSUMX → COUNTX
VAR CurrentCategorySum =...にあるSUM → COUNT
VAR TotalSum =...にあるSUMX → COUNTX
に置き換えることで、同様に累積比率を計算できます。
ParetoC =
VAR SummarizedTable =
SUMMARIZE(
ALLSELECTED(Table1), Table1[Category],
"Sum",COUNTX(Table1, Table1[Value])
)
VAR CurrentCategory =
SELECTEDVALUE ( Table1[Category] )
VAR CurrentCategorySum =
CALCULATE ( COUNT( Table1[Value] ), Table1[Category] = CurrentCategory )
VAR CumulativeSum =
SUMX (
FILTER (
SummarizedTable,
[Sum] > CurrentCategorySum
|| ( [Sum] = CurrentCategorySum
&& Table1[Category] <= CurrentCategory )
),
[Sum]
)
VAR TotalSum =
COUNTX(ALLSELECTED(Table1), Table1[Value])
RETURN
100 * DIVIDE ( CumulativeSum, TotalSum )
#参考
-
Creating a Pareto Chart Using DAX and Native Visuals in Power BI(Havens Consulting)
https://www.youtube.com/watch?v=bzF5kN2BQ60 -
Creating a Pareto Chart Using DAX and Native Visuals in Power BI
https://powerbi.tips/2016/10/pareto-charting/