Translate

2021年12月19日日曜日

【DAX備忘録】ある列の条件に基づいてデータを割り当てた列を作成する

DAXのアイデアの備忘録です。
ある列の値の範囲ごとに別のテーブルからの値を割り当てる方法のアイデアです。 割り当てる値を別のテーブルから取得するのですが、その値を一意に決める必要があるため処理が面倒です。

下記のメジャーにループ処理を追加できるといいのですが、DAXでのループは難しいようです。

割り当てる値を持っているテーブルで値を特定するためにランク情報を使います。

Rank = RANKX(ALL('Days'),[DATE],,ASC)


ランク情報で特定された値を割り当て先の値の範囲ごとに割り当てます。

割り当てる列 = VAR R1 = MIN('Days'[Rank]) VAR R2 = MIN('Days'[Rank])+1 VAR R3 = MIN('Days'[Rank])+2 VAR R4 = MIN('Days'[Rank])+3 VAR R5 = MIN('Days'[Rank])+4 VAR D1 = CALCULATE(MIN('Days'[DATE]),FILTER('Days','Days'[Rank] = R1)) VAR D2 = CALCULATE(MIN('Days'[DATE]),FILTER('Days','Days'[Rank] = R2)) VAR D3 = CALCULATE(MIN('Days'[DATE]),FILTER('Days','Days'[Rank] = R3)) VAR D4 = CALCULATE(MIN('Days'[DATE]),FILTER('Days','Days'[Rank] = R4)) VAR D5 = CALCULATE(MIN('Days'[DATE]),FILTER('Days','Days'[Rank] = R5)) VAR R = MIN([Day_R]) RETURN SWITCH(TRUE(), 'Power'[DATE] >= D1 && 'Power'[DATE] < D2,D1, 'Power'[DATE] >= D2 && 'Power'[DATE] < D3,D2, 'Power'[DATE] >= D3 && 'Power'[DATE] < D4,D3, 'Power'[DATE] >= D4 ,D4 )