順位を計算する

完了

RANKX DAX 関数は、順位を計算するために使用できる特別な反復子関数です。 その構文は次のとおりです。

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

すべての反復子関数と同じように、テーブルと式を渡す必要があります。 必要に応じて、順序付けの方向を設定するための順位値を渡したり、値が同じ場合の順位の処理方法を決定したりすることができます。

順序付けの方向

順序付けの方向は、昇順または降順のいずれかです。 収益の値などの肯定的なものに順位を付ける場合は、降順を使用して、最も高い収益が順位の先頭になるように指定できます。 顧客の苦情のような否定的なものに順位を付ける場合は、昇順を使用して、最も数が少ない苦情が順位の先頭になるように指定できます。 order 引数を渡さない場合、関数では 0 (ゼロ) (降順の場合) が使用されます。

同順位を処理する

順位値を飛ばすか、高密度順位を使用することで、同順位を処理できます。後者では、同順位に続く次の順位値が使用されます。 ties 引数を渡さない場合、関数では Skip が使用されます。 このセクションの後半で、各 tie 引数の例を操作するチャンスがあります。

順位付けメジャーを作成する

Product テーブルに次のメジャーを追加します。

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

レポートのページ 2 にあるテーブル視覚化に Product Quantity Rank メジャーを追加します。 このテーブル視覚化では、自転車製品がグループ化され、数量が表示されます。製品は数量の降順で順序付けされます。

RANKX 関数では、ALL DAX 関数によって返されるテーブルに対して反復処理が行われます。 モデル テーブル内のすべての行、または 1 つ以上の列の値を返すために ALL 関数が使用され、"すべてのフィルターが無視" されます。 そのため、ここでは、Product テーブルのすべての Product 列の値で構成されるテーブルが返されます。 テーブル ビジュアルは (Product テーブルのフィルターである) 製品別にグループ化されるため、ALL 関数では RANKX 関数を使用する必要があります。

このテーブル視覚化では、2 つの製品が 10 位という同順位に位置し、次の製品の順位が 12 になっていることに注意してください。 この視覚化は、Skipped ties 引数の使用例です。

次のタスクは、下のロジックを入力して、高密度順位付けを使用するように Product Quantity Rank メジャー定義を変更することです。

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

テーブル視覚化にスキップされた順位が存在しないことに注意してください。 同順位の 10 位に位置している 2 つの製品に続く次の順位は 11 になっています。

テーブル視覚化では、Product Quantity Rank の合計が 1 であることに注意してください。 その理由は、すべての製品の合計が順位付けされているためです。

製品の合計の順位付けは適切ではないため、次のロジックを使用して、1 つの製品がフィルター処理されていない限り、空白を返すようにメジャー定義を変更します。

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

Product Quantity Rank の合計が BLANK になっていることに注目します。これは HASONEVALUE DAX 関数を使用して、フィルター コンテキストで Product テーブルの Product 列に単一の値があるかどうかをテストすることで実現されています。 これは各製品グループには当てはまりますが、すべての製品を表す合計には当てはまりません。

フィルター コンテキストと HASONEVALUE 関数については、フィルター コンテキストのモジュールで紹介します。