Использование DAX для форматирования валюты на основе строки формата, сохраненной в измерениях

У меня есть факт продаж "Продажи" из нескольких стран, и в таблице фактов создана мера "Продажи" [Доход]

Я хотел бы создать одну меру, которая будет динамически форматироваться в зависимости от страны, поэтому продажи в США будут отформатированы в 100 долларов, а продажи в Великобритании - в 100 фунтов стерлингов (если контекст фильтра включает несколько стран, то можно просто пропустить символ валюты или вернуть пустое значение ())

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

Как этого достичь в DAX? Единственный вариант, который я знаю, сработает, это создать 5 отдельных показателей [Доход $], [Доход £] и т. Д., Но это создаст беспорядок в клиентских инструментах. Я смотрел на использование FORMAT, но не могу заставить его работать

Спасибо

1 ответ

Я обошел похожую проблему с помощью таблицы поиска. Я приложу свое решение к вашему делу.

создайте таблицу с именами валютных кодов и столбцами (символ, код валюты, идентификатор). Он будет хранить код каждой валюты вместе со своим символом.

Убедитесь, что в вашей таблице продаж хранится код валюты, который указывает валюту, в которой были сделаны продажи.

Используйте следующий алгоритм для генерации уникального идентификатора для кода валюты

(((int) CurrencyCode [0]) * 10000)

(((int) CurrencyCode [1]) * 100)

(((int) CurrencyCode [2]))

Пример: USD = 85|83|68 = 850000 + 8300 + 86 = 858386

мы конвертируем символ в код ASCII и делаем его числом. Это позволяет нам использовать MIN/MAX, чтобы получить отличный код валюты в DAX в качестве скаляра.

Внутри своей меры вы делаете следующее

ЕСЛИ

(

DISTINCTCOUNT ('Продажи' [CurrencyCodeId]) = 1,

LOOKUP ('CurrencyCodes' [Symbol], 'CurrencyCodes' [Id], MIN ('Sales' [CurrencyCodeId])) & "" & SUM ('Sales' [Amount]),

BLANK ()

)

Таким образом, мы получаем количество уникальных идентификаторов кода валюты. Если они все одинаковые, мы используем функцию поиска, чтобы получить символ и объединить его с суммой продаж.

Если бы MIN/MAX не потребовалось, если бы был какой-то способ получить первое значение в виде скаляра. TOPN возвращает строки.

Другие вопросы по тегам