Power BI Desktopを使用して、列名が年月で構成されるデータソースに対して開始月や終了月でフィルターする方法について記載します。
日付列を含むデータソースの場合は、スライサーなどのビジュアルを選択して開始月や終了月の範囲を指定するだけで事足りますが、列名で日付が構成されているデータソースについては一工夫が必要になります。
データソースの前提
今回サンプルとして使用するのは、エンジニアの予定稼働を記録したデータソースです。
以下の条件があります。
- 年月が列で表現されている
- 開始月と終了月の間の月は必ず稼働する
- 例えば、4月から6月まで稼働する案件がある場合、5月の予定稼働が空白になることはない
開始月をフィルタする方法
新しい列の作成
開始月を定義した列を新規作成するため、Power BI Desktopの「データ」で「その他オプション」を選択し、「新しい列」をクリックします。
設定画面が表示されます。
以下のようなクエリを書き、チェックアイコンをクリックします。
予定開始月 =
SWITCH(
TRUE(),
NOT ISBLANK([2404予定]), "4月",
NOT ISBLANK([2405予定]), "5月",
NOT ISBLANK([2406予定]), "6月",
"値なし"
)
クエリの内容ですが、各列を順番に参照し、最初に値があった列に対応した文字列を入れる処理をしています。
これで下準備は完了しました。
スライサーの作成
「視覚化」から「スライサー」アイコンを選択します。
前の項目で作成した列「予定開始月」を選択することで、以下の出力が得られます。
ビジュアルを変更したい場合は、「視覚化」-「ビジュアル」-「スライサーの設定」-「オプション」-「スタイル」から選択してください。
※ 本題とは関係ないため、他のオプション設定含め説明は割愛します。
動作テスト
正常に動作しているか確認して行きます。
まず、初期状態の全データを表示すると、以下の状態になります。
4月の予定開始月は9件です。想定通り表示されました。
5月の予定開始月は5件です。こちらも想定通り表示されました。
最後、6月の予定開始月は4件です。全パターン想定通り表示されました。
終了月をフィルターする方法
Power BI Desktopの操作は、開始月に記載した手順と同じため割愛します。
クエリは以下になります。(開始月とは逆順に定義)
終了予定月 =
SWITCH(
TRUE(),
NOT ISBLANK([2406予定]), "6月",
NOT ISBLANK([2405予定]), "5月",
NOT ISBLANK([2404予定]), "4月",
"値なし"
)
同じように確認していきます。
4月は1件、5月は3件、6月は14件で想定通りの結果となりました。
おわりに
以下のようにif文でクエリを書くことも可能*1ですが、3パターン以上ある場合はswitch文の方が可読性が高いです。
予定開始月 =
if (
NOT ISBLANK([2404予定]),
"4月",
if(
NOT ISBLANK([2405予定]),
"5月",
if(
NOT ISBLANK([2406予定]),
"6月",
"値なし"
)
)
)
以下、公式でも2つ以上の値を返すときはswitch文を使うように記載があります。
IF 関数 (DAX) - DAX | Microsoft Learn
なるべくシンプルな方法で処理していきたいですね。
*1:DAX関数のif文はthenやelseは使えません