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

完了

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

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

VALUES(<TableNameOrColumnName>)

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

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

HASONEVALUE 関数は、指定された列参照が単一の値にフィルター処理された場合に TRUE を返します。

SELECTEDVALUE 関数は、単一の値が何であるかを判断するタスクを簡素化します。 関数に列参照が渡されると、関数は単一の値を返します。また、フィルター コンテキストに複数の値がある場合、BLANK (または関数に渡される代替値) を返します。

次の例では、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
        )
    )

スクリーンショットには、Region、Revenue、Sales Commission の列を含む表が表示されています。Revenue 列には合計が表示されていますが、Sales Commission 列は BLANK です。

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

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

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

レポートのページ 2 に戻り、Revenue % Total Country メジャー定義を変更して、Sales Territory テーブルの Region 列がスコープ内にあることをテストします。 スコープに含まれていない場合、メジャーの結果は BLANK になります。

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

マトリックスのスクリーンショットが更新され、グループの合計集計が BLANK になりました。