Power BIのDAXにおけるVALUES関数とは?

Power BIを使っていると、データモデル内での計算や集計を柔軟に行うためにDAX(Data Analysis Expressions) を活用する場面が増えます。DAXはさまざまな関数を提供していますが、その中でも VALUES関数 は、フィルターコンテキストの制御やユニークな値のリストを取得したい場合などに、非常に便利です。本記事では、Power BIのDAXにおけるVALUES関数を徹底解説し、代表的な使い方や注意点についてわかりやすく紹介していきます。最後には、弊社で行っているコンサルティングやセミナーサービスの概要をご案内しますので、データ活用にお悩みの方はぜひ参考にしてみてください。


1. DAXとVALUES関数の概要

1-1. DAXとは

DAX(Data Analysis Expressions)は、Power BI、ExcelのPower Pivot、SQL Server Analysis Services(SSAS) Tabularモデルなどで使用できる数式言語です。テーブル内の列やフィルターコンテキストを元に動的な計算を行うことができます。

  • Excelの関数に似ている ものの、テーブルや列を扱う機能が強力

  • コンテキスト(フィルターコンテキスト・行コンテキスト) で算出結果が変わる

1-2. VALUES関数とは

VALUES関数 は、指定した列やテーブルに含まれる ユニークな値 を返すDAX関数です。コンテキストに応じて、動的に異なる値のセットを取得できます。

  • 構文

    DAX
    VALUES(<列またはテーブル名>)
  • 戻り値: 指定した列やテーブル内のユニークな値(テーブル形式)

  • 用途: DISTINCTCOUNTやCALCULATEなどと組み合わせて使い、動的な集計を行うときに便利


2. VALUES関数の代表的な使い方

2-1. 列のユニークな値を取得する

最もシンプルな使い方は、VALUES関数で単一の列を指定して、その列に含まれるユニークな値を取得するパターンです。

DAX
VALUES(Table[Column])

例えば、Sales テーブルの ProductCategory 列のユニークリストを取得したい場合は以下のように書きます。

DAX
VALUES(Sales[ProductCategory])

これをビジュアル化の軸などに使うこともできますが、多くの場合は別の関数と組み合わせて活用します。

2-2. CALCULATEやFILTERとの組み合わせ

DAXの醍醐味は、CALCULATEやFILTERといった関数と組み合わせて、動的にフィルターコンテキストを操作するところにあります。以下の例を見てみましょう。

DAX
Sales by Unique Customers =
CALCULATE(
SUM(Sales[SalesAmount]),
VALUES(Customer[CustomerID])
)

この式は、Salesテーブルの合計売上を計算する際に、Customer[CustomerID] のユニークな値の集合をフィルターとして適用します。
これにより、あるビジュアル(たとえば地域別の売上)で見たときに、その地域におけるユニークな顧客の売上合計 を算出できたりします。

2-3. DISTINCTCOUNTとの比較

DAXでユニークな値を扱う際、DISTINCTDISTINCTCOUNT 関数も頻繁に登場します。

  • VALUES関数: ユニークな値のテーブル を返す

  • DISTINCT関数: こちらもユニークな値のテーブルを返すが、若干動作が異なる場合がある

  • DISTINCTCOUNT関数: ユニークな値の数を 数値 で返す

VALUES現在のコンテキスト にある値の集合を保持してくれるため、コンテキスト変化(フィルターなど)に合わせて柔軟な振る舞いをします。一方、DISTINCTDISTINCTCOUNT はより直接的にユニーク数を求めるときに使われる関数です。


3. VALUES関数の注意点や動作の変化

3-1. フィルターコンテキストがゼロ件の場合

VALUES関数は、フィルターコンテキストによって結果が左右されます。もし、あるセグメントや切り口でデータがまったく存在しない場合、VALUES関数は空のテーブル を返す可能性があります。
このとき、DAXの計算式全体の振る舞いを考慮する必要があります。計算式が複雑な場合、思わぬエラーやブランク値を返すことがあります。

3-2. 複数列を指定する場合

VALUES関数は、1つの列だけでなく、テーブル を引数に取ることもできます。その場合は、テーブル内のユニークな行のセットが返されます。
しかし、データ量が多い場合にはパフォーマンスが低下する恐れがあるため、なるべく必要な列だけを指定 して利用するのがセオリーです。

3-3. ALL関数との組み合わせ

DAXには、VALUES関数の挙動をリセットするようなALL関数 があります。ALLはフィルターを解除してすべての値を取得するために用いられますが、VALUESと組み合わせて使うと高度な集計が可能になります。
例えば、以下のような式では、現在のコンテキストとは異なるスコープでユニーク値を取得して比較を行う、といった使い方ができます。

DAX
Compare Context =
COUNTROWS(
VALUES(Sales[ProductCategory])
)
-
COUNTROWS(
VALUES(ALL(Sales[ProductCategory]))
)

上記は単純な例ですが、たとえばユーザーが選択しているフィルターと全体のフィルターとの差分を計算したい場合などに応用できる考え方です。


4. 具体的な活用例

4-1. ユニークな顧客ID数を条件にした売上集計

「一定の顧客数を超えた場合にのみ、売上金額を合算したい」という要件があるとします。ここでVALUES関数とCALCULATE、FILTERを使って、以下のような式が作れます。

DAX
Sales for Customer Over 1,000 =
CALCULATE(
SUM(Sales[SalesAmount]),
FILTER(
VALUES(Customer[CustomerID]),
CALCULATE(DISTINCTCOUNT(Customer[CustomerID])) > 1000
)
)

この例では、ユニーク顧客IDが1,000件を超えている という条件を満たしたときだけ、売上を合算します。
ただし、実際のデータ構造によっては式をさらに細かく調整する必要があります。

4-2. 動的タイトルの生成

グラフやテーブルを作る際に、「現在どのカテゴリが選択されているか」を動的にタイトルへ表示したいケースがあります。

DAX
Selected Categories =
CONCATENATEX(
VALUES(Sales[ProductCategory]),
Sales[ProductCategory],
", "
)

CONCATENATEX 関数と組み合わせることで、現在のコンテキスト下でユニークなカテゴリの値をまとめて文字列で返すことが可能です。これをカードビジュアルに表示すれば、ダイナミックなタイトルを実現できます。


5. VALUES関数のパフォーマンス面での考慮

5-1. 大量データへの影響

テーブル全体や高カードinality(ユニーク値が非常に多い)の列をそのままVALUES関数で取得 すると、計算コストが大きくなる可能性があります。

  • なるべく 対象の列を限定 する

  • フィルターコンテキスト を適切に利用する

  • 必要に応じて 集計用テーブル を作成する

5-2. キャッシュの活用

Power BIでは、同じ計算を何度も呼び出す場合、キャッシュ(内部的なメモリ)を利用してパフォーマンスを高める仕組みがあります。VALUES関数と他のDAX関数を組み合わせる際、同一のユニークセットを繰り返し求めるようなケースでは、変数 (VAR) を活用して中間結果をキャッシュ する設計が有効です。

DAX
Measure with Var =
VAR UniqueProducts = VALUES(Sales[ProductID])
RETURN
CALCULATE(
SUM(Sales[SalesAmount]),
UniqueProducts
)

このように VAR を使うことで、VALUES(Sales[ProductID]) の結果を一時的に保持し、複数の箇所で参照する際に再計算を最小限に抑えることができます。


6. VALUES関数とその他DAX関数の比較

関数名 戻り値の型 主な用途
VALUES テーブル形式 コンテキスト内のユニーク値を動的に取得
DISTINCT テーブル形式 列のユニーク値を取得(VALUESと似ているが多少動作が異なる場合あり)
DISTINCTCOUNT 数値 列内のユニーク値の数を集計したい場合
ALL テーブル形式 特定の列やテーブルからすべてのフィルターを外す
CALCULATETABLE テーブル形式 フィルターを適用した新しいテーブルを返す

VALUES関数は単独でも使えますが、多くの場合はCALCULATEやALLなどと組み合わせてフィルターコンテキストを制御していくのが一般的です。


7. まとめと今後の活用ポイント

VALUES関数 は、DAXの中でもよく使われる関数でありながら、コンテキストとの組み合わせや他の関数との連携によって、その応用範囲は非常に広がります。ユニークな値の集合を取得することで、集計や条件分岐、動的なタイトル生成など、さまざまな要件に柔軟に対応できます。
一方で、大量データや複雑なモデルで不適切にVALUES関数を多用すると、パフォーマンスが低下したり、思わぬ結果を返したりするリスクもあるため、最適なモデリング他の関数との使い分け に注意する必要があります。


弊社のコンサルティング・セミナーサービス

本記事で紹介したDAX関数の活用やPower BIのデータモデリングに関して、さらに詳しく知りたい方や、実際のプロジェクトへの導入支援をご検討されている方は、ぜひ弊社のコンサルティングやセミナーをご活用ください。経験豊富なコンサルタントが、お客様のデータ環境や業務要件に合わせて最適な設計・運用をサポートいたします。また、DAXの基礎から応用までを体系的に学べるセミナーも定期的に開催しておりますので、具体的な事例や実践的なノウハウを身につけたい方に最適です。
詳細は下記のサービスページよりご覧いただけます。ぜひお気軽にお問い合わせください。

もし困り事があるなら、まずは無料相談を

「Power BI で箱ひげ図を使って詳細分析をしたいが、データモデルやDAX設計が複雑でわからない…」「Power Automate を併用してデータ更新フローを自動化したいが、どこから手を付ければいいのかわからない」といったお悩みをお持ちの方も多いのではないでしょうか。

私たちは、Power BIやPower AutomateなどのMicrosoft製品の導入・運用支援、およびデータ活用コンサルティングを行っています。

  • 具体的な設定や開発代行

  • 社内教育のための伴走型支援

  • 有料プランへの移行タイミングやROIの判断支援

など、さまざまなニーズに合わせたサービスをご用意しています。まずはお気軽に「無料相談」へお申し込みください。下記のリンクからお問い合わせいただけます。

👉 無料相談はこちらから


セミナーで学ぶ!DAX 関数の実践スキル

箱ひげ図をはじめ、Power BIを使いこなすうえで欠かせないのがDAX関数の知識です。DAXをしっかり学ぶことで、データの前処理から複雑な指標の算出までスムーズにこなせるようになります。そんなDAXとデータモデル設計を効率よく学習できるハンズオンセミナーを開催しています。

🔰 Power BIハンズオンセミナー初級編

  • 短時間でデータモデリングの基礎を身につける

  • 実務にすぐ活かせるレポート作成を実践形式で学ぶ

  • 少人数制なので、つまずきポイントを都度フォロー

👉 セミナー詳細を今すぐチェック

🚀 Power BIハンズオンセミナー中級編

  • DAX関数 × データモデル設計 の実践的なノウハウを習得

  • 複雑な分析要件にも対応できる応用力を身につける

  • 即戦力として業務効率アップや社内評価向上に直結

👉 詳細はこちら

DAXをしっかりマスターすると、箱ひげ図のような高度な可視化においても、必要なデータを柔軟に加工・集計できるようになります。結果的に、組織全体のデータドリブン化をリードできる存在となり、キャリアアップにも大いに役立ちます。

関連記事

この記事へのコメントはありません。

カテゴリー

アーカイブ