Иногда бывают ситуации, когда два или более объекта в таблице модели данных имеют одинаковые названия. Это могут быть имена сотрудников (полные однофамильцы), названия товаров, организаций и тому подобное. Идентифицировать такие записи как уникальные можно по уникальному коду — отдельному столбцу в таблице.
Но при отображении таких данных на дашборде могут возникнуть проблемы, связанные с особенностями работы DAX.
Рассмотрим вариант, как решить возможные проблемы.
Пример исходных данных:

Как видим, в нашей базе есть полные однофамильцы: Ивановы и Сидоровы.
Колонка «Код», скорее всего, для пользователя дашборда не несёт какой-либо полезной информации и её мы можем скрыть или удалить.
Получим такой результат:

DAX схлопнул записи с одинаковыми именами и теперь информация в таблице представлена не корректно.
Можно к имени сотрудника добавить его код, но это будет излишняя информация и удобство в работе она не прибавит.
Поступим иначе — добавим к имени сотрудника пробел нулевой ширины UNICHAR
(
8204
)
. Количество пробелов будет зависеть от номера позиции однофамильца минус один.
То есть первому однофамильцу пробел не добавляется, второму однофамильцу добавляется один пробел, третьему — два пробела и так далее.
Такое решение визуально не захламляет данные — пользователь эти символы не видит, и не увеличивает длину строки, так пробелы имеют нулевую ширину.
Если бы мы добавляли обычные пробелы и у нас была большая база клиентов, где, возможно, нашлось бы несколько сотен однофамильцев, то длина строки стала бы несколько сотен символов.
Пробелы нулевой ширины не увеличивают длину строки.
Добавим в таблицу расчётную колонку:
Имя уник =
VAR CustomersWithSameName =
CALCULATETABLE (
SUMMARIZE ( 'Продажи', 'Продажи'[Код], 'Продажи'[Сотрудник] ),
ALLEXCEPT ('Продажи', 'Продажи'[Сотрудник] )
)
VAR Ranking =
RANKX ( CustomersWithSameName, 'Продажи'[Код],, ASC, DENSE )
VAR Blanks =
REPT ( UNICHAR ( 8204 ), Ranking - 1 )
VAR Result = 'Продажи'[Сотрудник] & Blanks
RETURN
Result
Теперь выведем данные в виде таблице, но вместо столбца «Сотрудник» используем столбец «Имя уник»:

Как видим, схлопывания данных не произошло, все сотрудники обработаны как уникальные, и лишней информации в таблице нет.
Столбцы можно переименовать, чтобы не смущать пользователя отчёта.
В некоторых языках пробелы нулевой ширины могут обрабатываться иначе, поэтому метод следует проверить, чтобы не сломать отчёт.
Кроме того, показанный метод можно использовать и для других целей, например, для реализации расширенных методов сортировки в иерархиях.
Статья подготовлена по материалам сайта SQLBI.