インデックス列を活用する
Power BIで一行前の値と現在の行の値を比較する方法には、インデックス列を使用する方法があります。以下の手順で解説します。
- データの読み込み
データを読み込む Power BIで使用するデータを読み込みます。この例では、以下のようなデータがあるとします。
日付 | 売上 |
---|---|
2022/01/01 | 100 |
2022/01/02 | 150 |
2022/01/03 | 200 |
2022/01/04 | 300 |
2.インデックス列の作成
インデックス列を追加する データビューで、[新しい列]を選択し、[インデックス列]をクリックします。[開始値]には「0」を入力し、[ステップ値]には「1」を入力します。
- ホームタブから、新しい列を追加を選択します。
- 新しい列の名前を入力します。例えば、「Index」とします。
- 式の欄に、以下の式を入力します。
= Table.AddIndexColumn(#"Previous Step Name", "Index", 1, 1)
ここで、「Previous Step Name」は、前の手順で読み込んだデータテーブルの名前を指します。この式により、インデックス列が追加され、1から始まる通し番号が割り当てられます。
これにより、以下のようなインデックス列が追加されます。
日付 | 売上 | インデックス |
---|---|---|
2022/01/01 | 100 | 0 |
2022/01/02 | 150 | 1 |
2022/01/03 | 200 | 2 |
2022/01/04 | 300 | 3 |
3.一つ前の値を取得する列の作成
前の行の値を取得する インデックス列を使用して、前の行の値を取得します。以下の式を使用します。
- ホームタブから、新しい列を追加を選択します。
- 新しい列の名前を入力します。例えば、「Previous Value」とします。
- 式の欄に、以下の式を入力します。
= Table.AddColumn(#"Previous Step Name", "Previous Value", each List.First(List.Skip( [Column Name], [Index] -1)))
ここで、「Previous Step Name」は、前の手順で作成したインデックス列を含むデータテーブルの名前を指します。また、「Column Name」は、比較する列の名前を指します。この式により、前の行の値が取得されます。
参考)
= Table.AddColumn(#"変更されたクエリ名", "前の売上", each if [インデックス] = 0 then null else #"変更されたクエリ名"{[インデックス]-1}[売上])
この式は、変更されたクエリ名には、インデックス列が追加されたクエリ名を指定します。[前の売上]は、新しい列の名前です。この式は、インデックスが「0」の場合は、「null」を返し、それ以外の場合は、インデックスが1少ない行の[売上]の値を返します。
4.差分を計算する列の作成
現在の行と前の行を比較する 以下の式を使用して、現在の行と前の行の値を比較します。
= Table.AddColumn(#"前の売上を追加したクエリ名", "前の日付との差", each [売上] - [前の売上])
この式は、[前の売上を追加したクエリ名]には、前の手順で新しい列が追加されたクエリ名を指定します。[前の日付との差]は、新しい列の名前です。この式は、現在の行の[売上]の値から、前の行の[売上]の値を引きます。
LOOKUPVALUE関数
Power BIのLOOKUPVALUE関数は、指定されたテーブルの列から、指定された条件に一致する単一の値を返します。この関数は、主に、テーブルの1行に関する情報を別のテーブルに表示するために使用されます。以下は、LOOKUPVALUE関数の一般的な構文です。
上記の構文において、引数は以下の通りです。
<result_column>
: 返される列の名前です。<search_column>
: 検索される列の名前です。<search_value>
: 検索される値です。
LOOKUPVALUE関数は、複数の条件を使用してテーブルから値を取得することができます。複数の条件を指定する場合は、 <search_column>
と <search_value>
のペアをカンマで区切ります。
以下は、例として、Sales
テーブルから、製品名が「A社 製品1」である行の単価を取得するLOOKUPVALUE関数の使用例です。
UnitPrice = LOOKUPVALUE(Sales[UnitPrice], Sales[ProductName], "A社 製品1")
上記の例では、Sales
テーブルのUnitPrice
列から、ProductName
列が「A社 製品1」と一致する行のUnitPrice
の値が返されます。
LOOKUPVALUE関数は、単一の値を返すため、テーブルの複数の行を参照する場合や、複数の値を返す必要がある場合には使用できません。その場合は、他の関数(例えば、SUMX関数やFILTER関数など)を使用する必要があります。
LOOKUPVALUE 関数
1 つまたは複数の検索条件で指定した条件をすべて満たす行の値を返します。
LOOKUPVALUE(
<result_columnName>,
<search_columnName>,
<search_value>
[, <search2_columnName>, <search2_value>]…
[, <alternateResult>]
)
LOOKUPVALUE(
'Test scores - Sample File'[値],'Test scores - Sample File'[並び順],'Test scores - Sample File'[並び順]-1
)
*結果と検索のテーブル間にリレーションシップが存在する場合は、ほとんどのケースで、LOOKUPVALUE ではなく RELATED 関数を使用する方が効率的で、パフォーマンスが向上します。
IF文をつかって一行前の値と現在の値を比べる
Power BIで一行前の値と現在の行の値を比較するには、以下の手順に従ってください。
- テーブルのインデックス列を作成します。これは、各行に一意な番号を割り当てるために使用されます。これは、計算するために必要な情報を表に含める必要があるためです。
- IF関数を使用して、一行前の値と現在の行の値を比較します。これにより、各行で条件が満たされたかどうかを確認し、必要に応じて計算を実行します。
以下は、これらの手順を具体的に説明したものです。
まず、テーブルにインデックス列を追加します。これは、次の手順で使用するために必要です。インデックス列は、テーブルに既に存在する場合はスキップできます
Table with Index = ADDCOLUMNS(
'Table Name',
"Index", ROWNUMBER()
)
次に、IF関数を使用して、一行前の値と現在の行の値を比較します。この例では、[Value]
列が一行前の行の値よりも大きい場合、[Result]
列に"Yes"
を返します。それ以外の場合は、"No"
を返します。
Result = IF(
[Index] > 1 && [Value] > LOOKUPVALUE([Value], [Index], [Index] - 1),
"Yes",
"No"
)
上記の例では、IF関数の第1引数で、現在の行が1行目でない場合(つまり、[Index] > 1
)、および[Value]
が一行前の行の[Value]
よりも大きい場合、"Yes"
を返します。一行前の値を取得するには、LOOKUPVALUE関数を使用して、[Value]
列から、[Index]
列が[Index] - 1
と一致する行の値を取得します。それ以外の場合は、"No"
を返します。
以上のように、IF関数を使用して、一行前の値と現在の行の値を比較することができます。必要に応じて、条件を変更することができます。
その他の方法
もし現在の行の値が一行前の値より大きければ「〇」、小さければ「×」と返す。
昨年売上(列名)=
IF(
'テーブル名'[値]>
LOOKUPVALUE(
'テーブル名'[値],'テーブル名'[並び順], 'テーブル名'[値]-1
)
,"〇","×"
)
コメント