13
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Power BI で What-if 分析するには

Posted at

Power BI Desktop の2017年8月の更新で What-if 分析を行えるレポートの作成が簡単にできるようになったので使い方設定などの解説メモ。

What-if分析とは 特定の要素(値)が変化することで関連する値がどのように影響を与えるのかというさまざまな分析うちのひとつ。

追加された DAX 関数

  • Power BI Desktop(2.49.4831.521 / 2017-Aug)で追加された関数
  • Excel の Power Pivot や SQL Server Analysis Services でもいずれ使えるようになると考えられる。

GENERATESERIES - DAX 関数

GENERATESERIES | MSDN - DAX Function Reference
開始および終了の範囲の連続した数値をひとつの列にしたテーブルを返す。

構文
GENERATESERIES(<startValue>, <endValue>[, <incrementValue>])

startValue : 開始の値
endValue : 終了の値
incrementValue : 増分はオプション / 既定値は 1
例1
GENERATESERIES(1, 5)
Value
1
2
3
4
5

という、列がひとつのテーブル が返る。

他テーブルと変わりがなく、計算列(Caluclated Column)を追加してレポートのページフィルタに使ったり、増分が異なる結果を UNION | MSDN - DAX Function Reference で結合すると、すこし複雑なテーブルを生成できる。

例2
UNION(
    GENERATESERIES(7, 10)
   ,GENERATESERIES(20, 40, 20)
)
Value
7
8
9
10
20
40

注意

incrementValue が小数を持つ値のときなどビタっといかないことがある。
くわしくは、Generating a series of numbers in DAX - SQLBI がとても参考になります。
機微な数値を扱うことでなければ表示書式での対応でもよいし、CURRENCY | MSDN - DAX Function Referenceを使うと期待する結果が得られそうです。

例3
SELECTCOLUMNS(
    GENERATESERIES(-0.25, 0.25, 0.05),
    "Value", CURRENCY([Value])
) 

ELT作業があれば、クエリ エディター / Power Query で生成するのもよいかと。

SELECTEDVALUE - DAX 関数

SELECTEDVALUE | MSDN - DAX Function Reference

フィルタリングされたテーブルの 列の値がひとつのとき その値を返す。

構文
SELECTEDVALUE(<columnName>[, <alternateResult>])

columnName : テーブルの列名
alternateResult : 列の値がひとつでないとき返すオプション / 既定値は BLANK()
地区名 人数
西地区 10000
東地区 5000
南地区 300
というテーブル : 地域 があったとして、
例4
SELECTEDVALUE('分布'[地区名], "---")

テーブルに対し、

  • '分布'[人数] > 8000 とか '分布'[人数] < 1000 のフィルタがされたとき、地区名を返す。
  • '分布'[人数] > 4000 とか '分布'[人数] < 9000 のフィルタがされたとき、文字列"---" を返す。
  • '分布'[人数] = 6000 とか '分布'[人数] < 200 のフィルタがされたとき、文字列"---" を返す。
例5-同様の結果を得られる記述
IF(
    HASONEVALUE('分布'[地区名]),
    VALUES('分布'[地区名]),
    "---"
)

Using the SELECTEDVALUE function in DAX -SQLBI にはいくつかの利用パターンが紹介解説されているので必読です。

What-if 分析できる レポートを作成

前段で紹介した2つの新しいDAX関数が利用される機能が追加されたので使ってみる。

試してみる

モデリングタブ → What-ifグループ → 新しいパラメーター
[モデリング]タブ → [What-if]グループ → [新しいパラメーター]

What-if パラメーター ダイアログ
試しにそのまま [OK]
レポートには スライサーが、データモデルにはテーブルとメジャーが自動的に追加される。

image.png

追加されたテーブル
パラメーター = GENERATESERIES(0, 20, 1)
追加されたメジャー
パラメーター 値 = SELECTEDVALUE('パラメーター'[パラメーター])

image.png
動作を確認するため カード ビジュアルをレポートのページ追加し、フィールドには作成されたメジャーを設定してみた。パラメーターを変化させるスライサーは既定の状態で値が選択されていない状態なので、カード には (空白) もしくは (BLANK)が表示される。スライサーを操作すると対応する値がカードビジュアルに表示されるはず。

サンプル - もう少し具体的に

受注に関するファクトテーブルから受注額の増減具合をパーセンテージ指定しで試してみるサンプル
追加された機能[新しいパラメーター]を使わなくても作業は可能。

列名 データ型
受注日 日付
数量 整数
単価 通貨
集計用メジャー
受注額 = SUMX('受注', [数量] * [単価])
パラメータ用テーブル
増減率 =
SELECTCOLUMNS(
    GENERATESERIES(-0.25, 0.25, 0.05),
    "増減(%)", CURRENCY([Value])
)
パラメーター用メジャー
選択された増減率 = 
SELECTEDVALUE(
    '増減率'[増減(%)],
    0
)
パラメーターに関連して増減させるメジャー
受注額(What-if %) = 
[受注額] * (1 + [選択された増減率])

例えば、集合縦棒グラフを用いて 軸 は [日付]フィールド、値に [受注額]と[受注額(What-if %)]のメジャー2つを配置。フィールドへは[増減(%)] を設定したスライサーを同じページに配置。スライサーを操作すると凡例でいうところの [受注額(What-if %)]が変化する。

image.png

情報

Power BI Desktop August Feature Summary | Microsoft Power BI ブログ
Query and Data Modeling Languages | MSDN
Articles - SQLBI

その他

Power BI 勉強会 - connpass
Power BI Desktop を使い始めるには

13
20
0

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
13
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?