PowerQueryで、ExcelのVLOOKUP関数の「検索の型をTRUE」(近似一致)にする方法の備忘録。Excelでは、「年齢」を「年代」に変換など、区間分け(ビニング)にVLOOKUP関数は便利です。
PowerQueryでも同様の処理を実現したい場合があり、その手順は次のとおりです。
内容:
事例の前提
ExcelのVLOOKUP関数で実施する次の事例をPowerQueryで同様に処理する。
この事例は、VLOOKUP関数の「検索の型をTRUE」(近似一致)にすることで、年齢を年代に変換する方法についてのものです。
アウトプットイメージ
「顧客マスタ」の年齢を「年代テーブル」で検索して近似一致の「年代」を抽出する。
上記の元データは、次の「顧客マスタ」と「年代テーブル」。
実施手順
上記の「顧客マスタ」と「年代テーブル」クエリがある状態から以下説明します。
なお、「カスタム関数を使用する方法」、「カスタム列で実施する方法」の2つがあります。数式の理解がしやすいのは、カスタム関数を使用する方法と思います。
カスタム関数を使用する方法
「空のクエリ」の作成
「ホーム」-「新しいソース」-「その他のソース」-「空のクエリ」をクリック
カスタム関数の作成
「空のクエリ」(事例では、クエリ1という名称)が作成されるので、中央の数式欄に次の内容を入力、Enterで確定する。
= (検索年齢 as number) => Table.Last(Table.FirstN(年代テーブル,each [年齢区分] <= 検索年齢))[年代]
青字部分:変数名
赤字部分:クエリ、フィールド名によって異なる
カスタム関数の名称変更
画面左側にfxのマークがあるクエリ(カスタム関数)が追加されるので、カスタム関数名をわかりやすい名前に変更する(事例では「年代変換」としている)。
カスタム関数の呼び出し
「顧客マスタ」のデータに年代を追加するため、「顧客マスタ」を選択後、「カスタム関数の呼び出し」をクリックする。
カスタム関数の設定
以上で、次のとおり年齢から年代を抽出され、VLOOKUPの近似一致と同様処理ができている。
カスタム列で実施する方法
カスタム関数を作成したくない場合などは、カスタム列で実施することも可能。
考え方等は以下を参考にさせていただきました。
カスタム列の追加
追加したいクエリ(事例の場合は、「顧客マスタ」のクエリ)において、メニューの「列の追加」-「カスタム列」をクリックし、次の内容を入力する。
[
検索年齢 = [年齢],
変換結果 = Table.Last(Table.FirstN(年代テーブル, each [年齢区分]<=検索年齢))[年代]
][変換結果]
青字、緑字部分:変数名
赤字部分:クエリ、フィールド名によって異なる
上記でOKをすると、以下となる。
なお、カスタム列の設定後に自動生成された上記の数式は次のとおり。
= Table.AddColumn(ソース, "年代(関数なし)", each [
検索年齢 = [年齢],
変換結果 = Table.Last(Table.FirstN(年代テーブル, each [年齢区分]<=検索年齢))[年代]
][変換結果])
以上、Power QueryでVLOOKUPの近似一致と同様処理する方法の備忘録でした。