LoginSignup
14
14

More than 3 years have passed since last update.

Power BIでパレート図を作成する

Last updated at Posted at 2019-08-13

はじめに

  • Power BIで棒グラフを表示するとき、パレート図で表示できると便利です。
  • パレート図の累積比率算出式はクイックメジャーに用意されてないようです。:cry:
  • 累積比率のDAX式で、いろいろ試行錯誤しましたが、PowerBIxyzさんより、アドバイスをいただき、対策版を改定しました。(2019.9.1):smiley:

サンプルデータ

以下のテーブルデータを例に、パレート図を作成します。

Table1

Category Value
A 8
B 2
A 3
B 1
B 2
C 5
D 3

メジャーの作成

モデリング>新しいメジャーより、累積比率を計算するDAX式を入力し、メジャーを作成します。:confused:

方法1

参考サイト https://www.youtube.com/watch?v=bzF5kN2BQ60

DAX
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

算出した累積比率

image.png

上記DAX式では、カテゴリの合計が同じB,Cでは累積比率が一定となってしまうようです。:persevere:
カテゴリ毎の合計が全て異なる値であれば、正しく算出されます。

方法2(対策版)

カテゴリの合計が同じ場合に累積比率が正しく算出されるように、改良しました。:thumbsup:
Table1
Table1[Category]
Table1[Value]
の名前を置き換えて使うことで、他のテーブル名でも利用できます。

DAX
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 )

算出した累積比率

image.png

Pareto.gif

カテゴリの集計方法がカウントの場合

VAR SummarizedTable =... にあるSUMX → COUNTX
VAR CurrentCategorySum =...にあるSUM → COUNT
VAR TotalSum =...にあるSUMX → COUNTX
に置き換えることで、同様に累積比率を計算できます。

DAX
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 )

算出した累積比率(集計方法がカウントの場合)

image.png

参考

14
14
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14