このページでは、Power BI のDAX関数を使用して、前の行(1行上)のデータと比較し、引き算や足し算を行う方法を紹介します。
使用する関数:LOOKUPVALUE
はじめに
Power BIのDAXを使用したデータ分析は、複雑なデータ操作を可能にしますが、Excelでの操作とは異なり、行間の計算は直感的ではありません。例えば、前後の行と比較、1行上の値を足す、など。
ここでは、DAX関数のLOOKUPVALUE関数を使用して、前の行との比較を行う方法を紹介します。
LOOKUPVALUE関数はExcelのVLOOKUPと同じようなふるまいを行う関数になります。
DAXを使用した考えかた・計算方法
使用するデータ
本記事では、使用するデータとして下記のような日付データ[Date]と実際に計算を行う値[Score]で計算を行ってみます。テーブル名はtableにしています。
実際に計算を行う場合は、ご自身のデータに応じた値、列名に書き換えてください。
考え方
実際に計算を行う前に、tableに行の番号を記載した列をRANKX関数を使用して追加します。列名は[index]にしています。
index = RANKX('table',[Date],,ASC)
行番号を基準にてして前後の行の比較を行うために追加しました。
日付データの基準に行番号を作成しました。もし、日付データがない場合やDAXで行番号を作成したくない場合は、Power Queryの機能を使用いて、indexを作成してください。
計算式
追加した行番号を基に、LOOKUPVALUE関数を使用して今回は前日のScoreの返してみます。
LOOKUPVALUE([返してほしい値],[検索される値],[検索する値]
前日は現在の行番号-1になるので、[検索する値]に[index] – 1を入れます。
前日のScore=
LOOKUPVALUE('table'[Score],'table'[index], 'table'[index]-1)
このデータにはindex0が存在しないため、index1は空白(Blank)になっています。
前日のScoreとの比較は下記で表現できます。index1を空白にしたい場合は、if文などで、条件分岐してあげ類必要があります。
参考:ビジュアル計算(新しい計算)を使用する場合
新しい計算を使用すれば、行番号の追加なしでそのまま計算できます。
Calculation = [Score の合計]-PREVIOUS([Score の合計])
まとめ
- LOOKUPVALUE関数はExcelのVLOOLUPと似たふるまいを行う。
- 前後の行との比較は行番号を追加し、これを基準に計算。
- ビジュアル計算を使用すればもっと簡単に計算できる。