Вычисление рангов

Завершено

Функция RANKX (DAX) — это специальная функция итератора, которую можно использовать для вычисления рангов. Ее синтаксис выглядит следующим образом:

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

Как и все функции итератора, вы должны передать таблицу и выражение. При необходимости вы можете передать значение ранга, задать направление порядка или определить, как обрабатывать ранги, когда значения связаны.

Направление порядка

Направление порядка может быть либо по возрастанию, либо по убыванию. При ранжировании чего-то приемлемого, например, значений дохода, скорее всего, будет использоваться порядок по убыванию, чтобы первым отображался наивысший доход. При ранжировании чего-то неприемлемого, например, жалоб клиентов, вы можете использовать порядок по возрастанию, чтобы первым отображалось наименьшее количество жалоб. Если аргумент порядка не передается, функция будет использовать порядок 0 (по убыванию).

Обработка связей

Вы можете обрабатывать связи, пропуская значения ранга или используя плотное ранжирование, при котором применяется следующее значение ранга после связи. Если аргумент для связей не передается, функция будет использовать Skip. Ниже в этом разделе вы сможете поработать с примером каждого аргумента связи.

Создание мер ранжирования

Добавьте следующую меру в таблицу Product:

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

Добавьте меру Product Quantity Rank в визуальный элемент таблицы, который находится на странице 2 отчета. В визуальном элементе таблицы группируется велосипедная продукция и отображается количество, в котором продукция упорядочивается по убыванию.

Функция RANKX выполняет итерацию по таблице, возвращаемой функцией ALL (DAX). Функция ALL используется для возврата всех строк в таблице модели или значений в одном или нескольких столбцах. Она также игнорирует все фильтры. Таким образом, в этом случае она возвращает таблицу, которая состоит из всех значений столбца Product в таблице Product. Функция RANKX должна использовать функцию ALL, потому что в визуальном элементе таблицы группирование будет выполняться по продукту (который является фильтром в таблице Product).

Обратите внимание, что в визуальном элементе таблицы два продукта занимают десятое место, а ранг следующего продукта равен 12. Этот визуальный элемент является примером использования аргумента TIES Skipped.

На изображении показан визуальный элемент таблицы Bike Sales. Он включает три столбца: Product, Quantity и Product Quantity Rank. Строки таблицы упорядочены по убыванию значений в столбце Quantity. Два продукта занимают десятое место, а ранг следующего продукта равен 12.

Далее вам необходимо ввести следующую логику для изменения определения меры Product Quantity Rank, чтобы использовать плотное ранжирование:

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

Обратите внимание на то, что в визуальном элементе таблицы больше не существует пропущенное ранжирование. После двух продуктов, занимающих десятое место, следующий ранг равен 11.

На изображении показан визуальный элемент таблицы Bike Sales. Он включает три столбца: Product, Quantity и Product Quantity Rank. Строки таблицы упорядочены по убыванию значений в столбце Quantity. Два продукта занимают десятое место, а ранг следующего продукта равен 11.

Обратите внимание, что визуальный итог таблицы для столбца Product Quantity Rank равен единице (1). Причина в том, что ранг назначается сумме всех продуктов.

На изображении показано итоговое значение 1 для столбца Product Quantity Rank.

Неуместно ранжировать все продукты, поэтому теперь вы будете использовать следующую логику, чтобы изменить определение меры и вернуть пустое значение, если только один продукт не отфильтрован:

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

На изображении показано пустое итоговое значение для столбца Product Quantity Rank.

Обратите внимание, что итоговое значение Product Quantity Rank теперь является BLANK. Мы получили это, используя DAX-функцию HASONEVALUE для проверки того, имеет ли столбец Product в таблице Product единственное значение в контексте фильтра. Это касается каждой группы продуктов, но не всех групп, которые представляют все продукты.

Контекст фильтра и функция HASONEVALUE будут описаны в модуле контекста фильтра.