DAX>LOOKUPVALUE関数で期間展開マスタから商品価格を取得する|IT小技-PowerBI-2

LOOKPUVALUE関数解説ブログのアイキャッチ
目次

この記事で分かること

商品購入時点の価格を取得したいけれど、どのDAX関数を使えばよいか分からない。」

Power BIを使い始めると、このような悩みにぶつかることがあります。

私も以前は、FILTER関数やMAXX関数を組み合わせて価格を取得していました。やり方はIT小技5でご紹介した通りです。

しかし、複数の関数をネストしたり、VAR/RETURNを使った長い数式になったりして、後から読み返すのが大変でした。

そこで、「LOOKUPVALUE関数でもっとシンプルに書けないだろうか」と考えて試行錯誤した結果、期間展開マスタを利用すれば、初心者にも理解しやすい数式で実現できることが分かりました。

この記事では、LOOKUPVALUE関数を使って商品購入時点の価格を取得する方法を、実務でよくある価格改定の例を使って解説します。

この記事を読むことで、LOOKUPVALUE関数の具体的な使いどころが分かり、実務でも応用しやすい考え方を身に付けられます。

LOOKUPVALUE関数で商品購入時点の価格取得が必要になる場面

LOOKUPVALUE関数が役立つのは、商品価格が時系列で変化するデータを扱う場合です。

例えば、小売業では毎月1日に価格改定を行うケースがよくあります。

販売実績には購入日だけが保存されているため、

  • 2025年1月は100円
  • 2025年4月から120円
  • 2026年6月から130円

のような商品について、「購入日時点の価格」を取得しなければ正しい売上を計算できません。

今回は、このような実務でよくある価格改定を例に解説します。

LOOKUPVALUE関数の前に知っておきたい「期間展開マスタ」

LOOKUPVALUE関数を使う前に、今回の記事で利用する期間展開マスタについて説明します。

通常の商品マスタは、「価格が変更されたタイミング」だけを管理しています。

例えば、次のようなデータです。

<元の商品マスタ>

商品価格改定月
A100円26年1月
A120円26年4月
B150円26年1月
B180円26年5月

このままでは、「2026年2月のAの商品価格」をLOOKUPVALUE関数だけで取得することはできません。

そこで、価格が適用されるすべての月を持つようにデータを展開します。

<期間展開マスタ>

商品価格改定月
A100円26年1月
A100円26年2月
A100円26年3月
A120円26年4月
A120円26年5月
B150円26年1月
B150円26年2月
B150円26年3月
B150円26年4月
B180円26年5月

このように、毎月の商品価格を保持したマスタを、この記事では「期間展開マスタ」と呼びます。

期間展開マスタを用意しておけば、LOOKUPVALUE関数で「商品」と「月」の2条件から価格を取得できます。

なお、期間展開マスタの作成方法はPower Queryを利用すると自動化できますが、内容が長くなるため、本記事では完成済みのマスタを使用します。作成方法については、別記事で詳しく解説する予定です。

課題|商品購入時点の価格を取得-LOOKUPVALUE関数と期間展開マスタで―

使用データ

今回は、次の3つのテーブルを使用します。

<元の商品マスタ>

時系列で価格変動する商品マスタテーブル

<商品マスタ(整形)>(期間展開マスタのこと)

期間展開マスタにした商品マスタ

<販売実績テーブル>

販売実績テーブル

やりたいこと

販売実績テーブルへ、期間展開マスタから商品価格を取得します。

取得した価格は、この後「販売数量 × 商品価格」として売上金額を計算する予定です。

回答|LOOKUPVALUE関数で商品価格を取得する

それでは、期間展開マスタから商品購入時点の価格を取得してみます。

まずは販売実績テーブルに、販売日を月初日に変換した列を追加します。

C01_販売日_整形 = DATE(YEAR(‘販売実績テーブル'[販売日]),MONTH(‘販売実績テーブル'[販売日]),1)

次に、LOOKUPVALUE関数で商品価格を取得します。

C02_計算価格 =
LOOKUPVALUE(‘商品マスタ(整形)'[価格],
‘商品マスタ(整形)'[商品],
‘販売実績テーブル'[商品],
‘商品マスタ(整形)'[価格適用開始(整形)],
‘販売実績テーブル'[C01_販売日_整形]
)

下図は販売実績テーブルに価格が追加された状態です。

解説|LOOKUPVALUE関数の使い方

今回のLOOKUPVALUE関数は商品販売月の2つが一致する価格を取得しています。

それぞれの式を見ていきます。

DATE関数で販売日を月初日に変換

C01_販売日_整形 =
DATE(
YEAR(‘販売実績テーブル'[販売日]),
MONTH(‘販売実績テーブル'[販売日]),
1)

これは期間展開マスタと日付を一致させるためです。つまり販売実績テーブルが2025年4月18日のように1~31の値を取るため、期間展開マスタと同じく日を1に揃える必要があります。

ポイントは、「比較する列のルールを合わせる」ことです。

LOOKUPVALUE関数を適用

構文は以下の通りです。

LOOKUPVALUE(
戻り値,
検索列1,検索値1,
検索列2,検索値2
)

今回は次の通り対応させます。

引数今回の値
戻り値商品マスタ(整形)[価格]
検索列1商品マスタ(整形)[価格]
検索値1販売実績テーブル[価格]
検索列2商品マスタ(整形)[価格適用開始(整形)]
検索列2販売実績テーブル[C01_販売日_整形]

つまり、

商品が一致し、さらに販売月も一致する価格

を取得しています。

LOOKUPVALUE関数では、

条件をカンマで追加するだけでAND条件になります。

SQLのWHERE句やExcelのVLOOKUPとは少し考え方が異なりますが、慣れると非常に読みやすいDAXになります。

【重要】LOOKUPVALUE関数とRELATED関数の使い分け

LOOKUPVALUE関数とRELATED関数はどちらもマスタから値を取得する関数です。ただし、各々適した場面が異なります。

LOOKUPVALUERELATED
リレーション不要リレーション必要
複数条件で検索できる複数条件を結合したキー列を作る必要がある(後述)
一時的な検索に便利リレーション構築済みなら高速処理

例えば、商品マスタと販売実績テーブルが「商品ID」だけでリレーションできるなら、RELATED関数の方がシンプルです。

一方、今回のように

  • 商品
  • 販売月

の2条件で検索したい場合はLOOKUPVALUE関数の方が分かりやすく記述できます。

なお、複数条件でRELATED関数を利用する場合は条件列を結合したキー列を作成し、リレーションを設定する必要があります。今回なら以下のようなキー列(計算列)を追加します。

<販売実績テーブル>
C03_key_rel = [商品]&”_”&[C01_販売日_整形]

<商品マスタ(期間展開マスタ)>
key_rel = [商品]&”_”&[価格適用開始(整形)]

まとめ

今回のポイントを整理します。

  • LOOKUPVALUE関数は複数条件で値を検索できます。
  • 商品価格のような時系列データは、期間展開マスタを作ると扱いやすくなります。
  • DATE・YEAR・MONTH関数で販売日を月単位に揃えることがポイントです。
  • リレーションが不要な場面ではLOOKUPVALUE関数が便利ですが、既にリレーションがある場合はRELATED関数の方がシンプルです。
  • DAXだけで解決しようとせず、データの持ち方を工夫する(期間展開マスタにする)と、式が読みやすく保守もしやすくなります。

LOOKUPVALUE関数は、価格取得だけでなく、税率や部署情報などマスタから値を取得する場面でも活躍します。ぜひPower BIの実務で活用してみてください。

次におすすめの記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

“ねこまご”は、猫の癒しと“孫の手”の実務サポートを合わせた造語です。
Power BI と IT 業務の“こまごま解決”に特化した、実務者向けブログを運営しています。

社内SEを約10年経験した後、2025年にブログ開設しました。
日々の現場で発生する"細かなIT課題"に向き合ってきた中で、
「専門用語なしで理解したい」
「実務でどう使うかを知りたい」
「時間がない中でも効率よく学びたい」
というニーズを強く感じてきました。

私自身、家事・育児・家族サービス・仕事の合間で学び続けている生活者です。限られた時間の中でスキルを磨いていく大変さや、思うように勉強が進まないもどかしさもよく分かります。

だからこそ、このブログでは、
1) Power BI などのITツールのTips(IT小技シリーズ)
2) 初心者でも挫折しないPower BI講座
3) リアルなブログ運営記録(将来的に配信予定)
を、できるだけシンプルに、すぐ実務で使える形にして発信しています。

難しい専門用語を避け、「すぐ役立つITスキル」を届けることを大切にしています。

ITは一気に習得するより、小さな疑問をひとつずつ解消していくことが近道だと考えます。

その“かゆいところに手が届く”存在として、実務力向上やキャリアアップに悩む読者の力になれるブログを目指しています。

コメント

コメントする

CAPTCHA


目次