DAX 101: Использование CONCATENATEX в измерениях

Tags: DAX

В этом примере использование CONCATENATEX помогает определить из списка страны, в которых ведет свою деятельность компания, страну с самой высокой эффективностью и относительным объемом продаж. Цель состоит в том, чтобы получить следующий отчет:

 

Необходимо учитывать несколько проблем при написании этого измерения:

  • Измерение должно возвращать страну с самыми высокими показателями на основе продаж.
  • Измерение должно возвращать строку, а не агрегированное число.
  • Результат должен содержать как название страны, так и процент продаж.
  • Если несколько стран связаны, измерение должно вернуть все вовлеченные страны. Оно не может просто вернуть одну страну - первую страну в алфавитном порядке.

Вот полный код измерения:

COUNTRYWITHMOSTSALES :=

VAR TOTALSALES = [ROUNDEDSALES]

VAR COUNTRYSALES = ADDCOLUMNS ( VALUES ( CUSTOMER[COUNTRYREGION] ), "SALES", [ROUNDEDSALES] )

VAR COUNTRYPERC = ADDCOLUMNS ( COUNTRYSALES, "PERC", DIVIDE ( [SALES], TOTALSALES ) )

VAR RESULTS = ADDCOLUMNS (

    COUNTRYPERC,

    "RESULT", CUSTOMER[COUNTRYREGION] & " (" & FORMAT ( [PERC], "0.00%" ) & ")"

)

RETURN

IF (

    TOTALSALES > 0,

    CONCATENATEX (

        SELECTCOLUMNS (

            TOPN ( 1, RESULTS, [SALES] ),

            "RESULT", [RESULT]

        ),

        [RESULT],

        CONCATENATE ( ",", UNICHAR ( 10 ) )

    )

)

Расчет выполняется по следующим шагам:

  1. TotalSales содержит объем продаж для текущей ячейки. Стоит отметить, что этот пример использует округленную сумму для продаж с единственной целью форсировать связи - использование точной стоимости продаж не учитывает связи, и демонстрация будет менее эффективной.
  2. CountrySales хранит названия стран вместе с объемом продаж в каждой стране.
  3. CountryPerc добавляет процент продаж страны к TotalSales.
  4. Results - последняя переменная таблицы. Добавляется новый столбец, объединяющий название страны и процент в виде новой строки, в формате “United States (25.00%)”.

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

В случае, если TOPN возвращает несколько строк, необходимо показывать их одну за другой, чтобы было ясно, что результат не является уникальным. CONCATENATEX - это итератор, который объединяет строки и создает одну строку из таблицы. Третий параметр CONCATENATEX - это разделитель между объединенными элементами. В этом очень специфическом случае это запятая, за которой следует UNICHAR (10), что является не чем иным, как сложным способом написания «пожалуйста, добавьте новую строку» в DAX.

CONCATENATEX очень полезен в подобных сценариях, где невозможно предположить, что результатом является таблица из одной строки. DAX рассматривает таблицу с одной строкой и одним столбцом как скалярное значение. Действительно, VALUES часто используется для извлечения значения из одноэлементной таблицы. Тем не менее, CONCATENATEX обеспечивает более надежное решение, поскольку оно также работает, когда таблица содержит несколько строк.



No Comments

Add a Comment