フィルター コンテキストを調べる

完了

VALUES DAX 関数を使用すると、フィルター コンテキストの値を数式で決定できます。

VALUES 関数の構文は次のとおりです。

VALUES(<TableNameOrColumnName>)

この関数では、テーブル参照または列参照を渡す必要があります。 テーブル参照を渡すと、フィルター コンテキスト内にあるものについて、行を含む同じ列を持つテーブル オブジェクトが返されます。 列参照を渡すと、フィルター コンテキスト内にある一意の値の単一列テーブルが返されます。

この関数からは常にテーブル オブジェクトが返されます。また、1 つのテーブルに複数の行が含まれる可能性があります。 そのため、特定の値がフィルター コンテキスト内にあるかどうかをテストするには、まず数式で VALUES 関数から 1 つの行が返されることをテストする必要があります。 このタスクを実行するには、2 つの関数が役立ちます。HASONEVALUESELECTEDVALUE の DAX 関数です。

HASONEVALUE 関数からは、特定の列参照が 1 つの値にフィルターされている場合に TRUE が返されます。

SELECTEDVALUE 関数を使用すると、1 つの値が何であるかを判別するタスクが簡単になります。 関数に列参照が渡されると、1 つの値が返されます。フィルター コンテキストに複数の値がある場合は、空白 (または関数に渡す代替値) が返されます。

次の例では、HASONEVALUE 関数を使用します。 販売手数料を計算する次のメジャーを、Sales (売上) テーブルに追加します。 Adventure Works では、歩合率は米国を除くすべての国/地域で収益の 10% であることに注意してください。 米国の場合、営業担当者は 15% の歩合を獲得します。 このメジャーを小数点以下 2 桁の通貨として書式設定し、それをレポートの [ページ 3] にあるテーブルに追加します。

Sales Commission =
[Revenue]
    * IF(
        HASONEVALUE('Sales Territory'[Country]),
        IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )

Sales Commission (販売手数料) の結果の合計が空白であることに注目してください。 その理由は、Sales Territory (販売区域) テーブルの Country (国) 列のフィルター コンテキストに複数の値があるためです。 この場合、HASONEVALUE 関数から FALSE が返され、Revenue (収益) メジャーに空白が乗算されます (空白が乗算された値は空白です)。 合計を生成するには、このモジュールの後半で説明する反復子関数を使用する必要があります。

フィルターの状態をテストするために使用できる他の 3 つの関数は次のとおりです。

  • ISFILTERED - 渡された列参照が "直接" フィルター処理されている場合に TRUE が返されます。
  • ISCROSSFILTERED - 渡された列参照が "間接的に" フィルター処理されている場合に TRUE が返されます。 同じテーブルまたは関連テーブルの別の列に適用されているフィルターが、フィルター処理によって参照列に影響する場合、列はクロスフィルター処理されます。
  • ISINSCOPE - 渡された列参照がレベルの階層内のレベルである場合、TRUE が返されます。

レポートの [ページ 2] に戻り、Revenue % Total Country (国の収益合計 (%)) メジャー定義を変更して、Sales Territory (販売区域) テーブルの Region (地域) 列がスコープ内にあることをテストします。 スコープに含まれていない場合、メジャーの結果は空白になります。

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    IF(
        ISINSCOPE('Sales Territory'[Region]),
        DIVIDE(
            CurrentRegionRevenue,
            TotalCountryRevenue
        )
    )

マトリックスの視覚エフェクトでは、地域がスコープ内にある場合にのみ、Revenue % Total Country (国の収益合計 (%)) の値が表示されるようになりました。