業務ハックLab -とある情シスの備忘録-

とある情シスの備忘録的なものです。

【スポンサーリンク】

Power BIの累計値計算で嵌った事とその解消方法について

皆さん、こんにちは。

業務ハックLabのよ~よんです。

先日からPower BIで新型コロナウィルス感染症の陽性患者数についてレポート作成に挑戦しています。

Power BI王子こと、Microsoft MVPの清水 優吾さんのPower BIレポート集にある
「東京都 新型コロナウイルス陽性患者発表詳細 - 2020.07.12」を参考に作成しています。

まだ完成はしていないのですが作成している中でめちゃくちゃ嵌った点があったので備忘録として記事を書いています。

累計値の歯抜け問題

今回、静岡県が公表しているオープンデータを利用して、優吾さんが展開しているハンズオン資料を参照しながらレポートを作成していました。

順調に設定が進み、陽性患者数累計をグラフ化した際にそれが起きました。

そうです。

グラフの歯抜けです。

本来であれば下記のような形で表示をしたかったのですが

f:id:yo-yon:20200906190924p:plain

実際はこんな感じで表示されてしまいました。

f:id:yo-yon:20200906191101p:plain

原因としてはオープンデータで提供されているデータの日付が連続データではなく発生日毎のデータになっていた為、カレンダーテーブルと陽性患者詳細テーブルのリレーションを組んだ際にクロスフィルターが掛かってしまい、発生していない日付を抜かした形で累計計算がされてしまったんです。
色々、試行錯誤し解決方法を見つけたのでそちらをご紹介いたします。

歯抜け累計値の解決方法

歯抜け状態の時の構成

解決方法に入る前にデータテーブルの構成とリレーションについての情報を記載します。

【陽性患者詳細テーブル】

f:id:yo-yon:20200906194545p:plain

【年代】

f:id:yo-yon:20200906194700p:plain

【性別】

f:id:yo-yon:20200906194837p:plain

【カレンダーテーブル】

f:id:yo-yon:20200906194914p:plain

【各テーブルのリレーション】

f:id:yo-yon:20200906194948p:plain

f:id:yo-yon:20200906195138p:plain

f:id:yo-yon:20200906195213p:plain

f:id:yo-yon:20200906195244p:plain

とこんな感じの構成になっています。

さてでは本題の解決方法です。

歯抜けになっている状態の時に作成したメジャーは[陽性者数]と[陽性者数累計]です。

いずれも「陽性患者詳細」テーブル下に作成しました。

[陽性患者数]メジャーは

f:id:yo-yon:20200906195644p:plain

[陽性者累計]メジャーは

f:id:yo-yon:20200906195754p:plain

といった感じにしました。

この場合、陽性患者詳細の公表_年月日を元に累計値の集計をかけており、

当然、公表がなかった日付に関してはデータが0ではなくnullの状態になる為、

歯抜けになってしまいます。

f:id:yo-yon:20200906201125p:plain

修正後の構成

お待たせしました。
ようやく解決方法です。
陽性患者詳細テーブルには通しの日付データが無いので、カレンダーテーブルに陽性者数と陽性者累計数のメジャーを作成しました。

[陽性患者数カウント]メジャーは

f:id:yo-yon:20200906201247p:plain

COUNTX関数で該当する日付の件数を返す形にしているのですが肝としては公表_年月日と合致しない日付に関しては0を代入する形にしたところです。

こんな感じになります。

f:id:yo-yon:20200906201653p:plain

この集計をベースに累計値の計算を行います。

[陽性患者数累計カウント]メジャーは

f:id:yo-yon:20200906201832p:plain

そうするとこんな感じで0の日が歯抜けにならずに累計データができました。

f:id:yo-yon:20200906202112p:plain

若干無理やりな感じがありますが、私自身で今思いつくやり方です。

もっとスマートなやり方もありそうな気もするのですがとりあえず目的は達成できました。

f:id:yo-yon:20200906190924p:plain

皆さんの参考になれば嬉しいです。

免責事項