次の方法で共有


VALUES の代わりに SELECTEDVALUE を使用する

データ モデル作成者は、列が特定の値によってフィルター処理されるかどうかをテストする DAX 式を記述する必要が生じることがあります。

以前のバージョンの DAX では、3 つの DAX 関数: IFHASONEVALUE、および VALUES を含むパターンを使用して、この要件を安全に実現できました。 次のメジャー定義は、その例を示しています。 この定義では、オーストラリアの顧客に対する売上のみについて、売上税が計算されます。

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

この例では、Country-Region 列の単一の値が現在のフィルター コンテキストで表示可能な場合にのみ、HASONEVALUE 関数によって TRUE が返されています。 TRUE の場合、VALUES 関数はリテラル テキスト "Australia" と比較されます。 VALUES 関数によって TRUE が返されると、Sales メジャーが 0.10 (10%) で乗算されます。 複数の値によって列がフィルター処理されるために HASONEVALUE 関数によって FALSE が返された場合は、最初の IF 関数によって BLANK が返されます。

HASONEVALUE は、防御的な手法として使用します。 複数の値によって Country-Region 列がフィルター処理される可能性があるため、この関数は必須です。 この場合、VALUES 関数によって複数の行から成るテーブルが返されます。 複数行のテーブルがスカラー値と比較されると、エラーになります。

推奨事項

SELECTEDVALUE 関数を使用することをお勧めします。 これにより、この記事で説明されているパターンと同じ結果を、より効率的かつ円滑に得ることができます。

ここで、SELECTEDVALUE 関数を使用して、メジャー定義の例を書き直します。

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

ヒント

SELECTEDVALUE 関数に "代替結果" 値を渡すことができます。 列にフィルターが適用されないか、または複数のフィルターが適用されると、代替結果値が返されます。