Использование 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 возвращает строки.