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

#はじめに
- Power BIで棒グラフを表示するとき、[パレート図](https://ja.wikipedia.org/wiki/パレート図)で表示できると便利です。
- パレート図の累積比率算出式はクイックメジャーに用意されてないようです。: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

```ruby: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/6765262b-1600-26f7-df9a-40967b3650cc.png)

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

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

```ruby: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/8552d20d-7e8e-64df-2d93-e2c2e2d0799b.png)

![Pareto.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/b85bdb89-cd7c-ac6b-4afc-7e7b1f86c220.gif)


###カテゴリの集計方法がカウントの場合
 VAR SummarizedTable =... にあるSUMX → COUNTX
 VAR CurrentCategorySum =...にあるSUM → COUNT
 VAR TotalSum =...にあるSUMX → COUNTX
に置き換えることで、同様に累積比率を計算できます。


```ruby: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/083aa601-1120-8c3c-d217-0e443f20af54.png)

#参考
- 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/