CONCATENATEX
CONCATENATEX вычисляет выражение для каждой строки таблицы, после чего объединяет все полученные значения через указанный разделитель и возвращает в виде одной строки. Функция возвращает строку, объединенную через разделитель (если был указан) и отсортированную по выражению (если было указано).
Синтаксис
CONCATENATEX (<Table>, <Expression>[, <Delimiter> [, <OrderBy_Expression> [, <Order>] [, <OrderBy_Expression> [, <Order>] [, ...]]]]])
где
Table– (обязательный) таблица, содержащая строки, для которых будет вычисляться выражение.Expression– (обязательный) выражение, которое должно быть вычислено для каждой строки таблицы. Может быть поле или скалярные выражения любого типа.Delimiter– (обязательный) разделитель, между объединяемыми строками. Может быть только строкой.OrderBy_Expression– (опциональный) выражение, которое будет использоваться для сортировки таблицы. Может быть поле или скалярные выражения любого типа.Order– (опциональный) применяемый порядок ( ASC/DESC ). По умолчанию ASC.
Использование оператора конкатенации в выражении
В выражении CONCATENATEX можно использовать оператор конкатенации &. Он позволяет объединять строковые константы, числовые значения, даты, поля, результаты функций и выражений.
Базовая конкатенация текста и значений
Объединение строковых констант:
"Товар: " & [ProductName]Конкатенация чисел:
[Quantity] & " шт."→ результат, например,"10 шт."Конкатенация дат:
"Дата заказа: " & [OrderDate]→ результат, например,"Дата заказа: 26.01.2025"
Конкатенация полей
Прямое обращение к столбцам:
'dimproduct'[ClassName] & " - " & 'dimproduct'[ColorName]Использование
RELATEDдля доступа к связанным таблицам:'Sales'[OrderNumber] & " (" & RELATED('Product'[BrandName]) & ")"
Конкатенация результатов вычислений и функций
С агрегатными функциями (внутри
CONCATENATEXони вычисляются для каждой строки исходной таблицы):"Мин. цена: " & MIN('Product'[UnitPrice])С математическими выражениями:
"Сумма: " & [Quantity] * [UnitPrice]С текстовыми функциями:
LEFT([ProductName], 1) & ". " & [ProductCode]С функциями даты и времени:
"Год: " & YEAR([OrderDate])
Вложенное использование и особые случаи
Внутри логических функций:
IF([Quantity] > 1, [ProductName] & " (много)", [ProductName] & " (один)")Вспомогательные функции: Выражение можно использовать внутри других функций, например, для подсчета длины итоговой строки с помощью
LEN:LEN([ProductName] & " (" & [ProductCode] & ")")
Использование специальных символов
Поддерживается работа с Unicode-символами, кириллицей, пробелами и специальными символами. Например:
"Русский" & " " & "текст"Допускается использование:
пробелов в начале, середине и конце строки;
кавычек и других специальных символов;
переносов строк.
Пример
Представим, что у вас есть интернет-магазин, который продает различные товары, и вы хотите создать отчет, где пользователи смогут видеть список категорий товаров, которые были куплены клиентами. При этом вы хотите вывести этот список в виде одной строки, чтобы легко было просматривать результаты. Для этой цели можно воспользоваться следующей мерой:
Категории товаров = CONCATENATEX (
SUMMARIZE (
'Товары',
'Товары'[classname]
),
'Товары'[classname],
", "
)где
SUMMARIZEгруппирует данные по столбу'Товары' [classname], создавая таблицу с уникальными значениями категорий.CONCATENATEXпроходит по каждому уникальному значению категории и объединяет их в одну строку, добавляя между ними запятую и пробел.
Таким образом, мера создает список категорий товаров, которые были приобретены клиентами, и объединяет их в одну строку, разделяя запятыми и пробелами. В нашем примере мы дополнительно добавили в таблицу столбцы bandname и colorname и получили следующий результат:
Особенности и ограничения
При использовании CONCATENATEX учитывайте особенности вычисления выражений, которые возвращают строку (включая конкатенацию через оператор & и функцию CONCATENATE).
Ограничения
Логические выражения в конкатенации не поддерживаются.
На платформе не выполняется неявное приведение логических значений (TRUE/FALSE) и результатов сравнений к строке. Попытка “склеить” логическое выражение со строкой приводит к ошибке вычисления.
Примеры выражений, которые не поддерживаются:
TRUE() & "text"FALSE() & "text"(5 > 3) & "text"NOT(FALSE()) & "text"ISBLANK() & "text"CONCATENATE(MAX('клиенты'[стиль имени]), 1 > 0)
Рекомендуемый обходной путь:
используйте IF (или SWITCH) и возвращайте строку явно. Например:
IF(condition, "TRUE", "FALSE") & " text"
Особенности форматирования
Отображение очень маленьких чисел с плавающей точкой может отличаться от Power BI.
При приведении чисел к строке платформа может использовать научную нотацию.
Пример (отличие в формате, не ошибка):
Power BI:
0.000000000000001 & " tiny"→"0.000000000000001 tiny"Visiology:
0.000000000000001 & " tiny"→"1e-15 tiny"
Если требуется фиксированный формат, используйте явное форматирование/округление значения перед конкатенацией.
Смотрите также
CONCATENATE
Поддерживаемые функции DAX
Математические операторы
Нужна дополнительная помощь?