CONCATENATEX

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
Математические операторы

Нужна дополнительная помощь?

Свяжитесь с технической поддержкой.