6
3

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 3 years have passed since last update.

Power Query イベント期間を1日ずつ分割

Posted at

Power Queryでクロス結合の活用例です。

[その3] Power BI で社内のリース車の利用状況を可視化してみた|@KodamaJn が題材です。
image.png

日付をまたぐ時間間隔も暦日ごとに時間を集計するなど|@PowerBIxyz と同じことを
詳細エディタを使わず、画面ポチポチ( +if文 ) で作ってみた感じです。
Excelでデータ加工している感覚に近いかも。

#サンプルデータ
###イベントデータ
image.png

###カレンダーテーブル
CALENDER関数(DAX式)は使えないので、
Power Queryでカレンダー|@tanuki_phoenix を参考に作ってみました。
image.png
日付列のデータ型は 日付/時刻 にしておきます。

#手順

##1.クロス結合
前回の記事を参考に、イベントテーブル に カレンダーテーブル をクロス結合します。
image.png
~途中略~
image.png
tableの展開まで済ませます。

##2.判定列作成
新しい列を作って、欲しいデータに"1"が入るようにします。
カレンダーの日付StartEndの間に含まれてたら、その日付は欲しいデータなので"1"にします。
image.png

if [Start] < [日付] + #duration(1, 0, 0, 0) and
    [日付] < [End]
then
    1
else
    0

日付を比較するときに気をつけるのは、
4月1日4月1日 0時00分 のことなので、
Startと比較するときは 日付+1日 してください。

#duration(1, 0, 0, 0) が "1日" を表しています。
この資料によると#duration(日, 時, 分, 秒)ってことらしいです。

##3.欲しいデータのみをフィルタ
欲しいデータは 判定列=1 になっているので フィルタします。
image.png
欲しいデータだけになりました。
image.png

##4.後片付けとおまけ情報追加
###判定列はもう使わないので削除
image.png
###モデリングや集計に必要な情報を追加
見せたい情報によっても変わるので、要件に合わせていろいろ追加してください。
####1日に分割した単位でStart、Endを計算

分割したデータのStart時刻は、Start日付の大きい方
image.png

分割したデータのEnd時刻は、End日付+1の小さい方
image.png

####分割Startから分割Endまでの時間を計算
image.png

###StartとEndを削除
モデリングで、クロス結合前のイベントテーブルとリレーションさせれば、
これらの情報は引っ張ってこれるので、このテーブルからは除きます。

###できあがり
image.png

#あとがき
以前、業務でこれを求められたんですが、当時はPower Queryでの加工方法がわからず、
結局 データソース側(Access)SQLで分割してました。。
たまたまデータソースも自分で弄れたから助かったけど、
作り直す機会があったら、Power Queryでやり直したいなぁ。

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?