colconcat

Назначение

Название функции colconcat - сокращение от column concatenation (конкатенация колонки).

При помощи функции colconcat можно фильтровать данные в таблице согласно данному условию (второй аргумент), затем объединить все значения первого аргумента вместе и получить объединенное значение. Конкатенация - традиционный термин, используемый для обозначения объединения символов одной строки с символами другой.

Например, у нас есть значения A, B, и C. Объединение данных значений выдает отдельную строку ABC.

В отличие от функции concat, в данной функции нет возможности добавить разделитель. Тем не менее, вы всегда можете извлечь колонку до того, как добавить желаемый разделитель к каждому значению (используя узел Производные колонки). Это позволит разделителю появиться в возвращаемом функцией colconcat значении и получить желаемый результат (за исключением самого последнего значения, которое будет иметь дополнительный разделитель, но вы всегда можете удалить его или игнорировать). Ввиду гибкости функций и их произвольной природы, существует множество сценариев, в которых вы можете использовать эту функцию.

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

Синтаксис

colconcat(колонка,[строка])

Аргументы

Первый обязательный аргумент - имя колонки. Данный аргумент может включать теги колонок (#column) только в том случае, если именованный аргумент "type" отсутствует.

В целях совместимости второй необязательный аргумент автоматически конвертируется в именованный аргумент "фильтр" (если данный именованный аргумент отсутствует). Используются следующие именованные аргументы:

  • "type": строковый аргумент, имеющий одно из следующих значений: "numerical", "integer", "yesno", "string", "datetime", "stringid", "text", "numid".

    • Если данный аргумент пропущен, то единственный обязательный аргумент рассматривается как существующее имя колонки или строковая константа, эквивалентная имени колонки.

    • Если данный аргумент присутствует, то обязательный аргумент рассматривается как выражение строкового типа, которое применяется к именам колонках в родительском датасете.

    Значение аргумента "type" - тип обработанных имен колонок. Колонки других типов будут пропущены, и для них функция вернет пустое значение.

  • "keys": строковая константа со списком колонок, означающих ключевые колонки, на которых функция группирует исходные данные (подобно выражению GROUP BY в SQL), т.е. "[Origin][Cylinders]". Вместо имен колонок также могут использоваться теги колонок.

  • filter: строковое выражение, которое обозначает фильтр и которое применяется к исходным данным до выполнения агрегирования (подобно выражению HAVING в SQL). Может отличаться в разных строках таблицы данных:

    filter:=[Mpg]>20

  • "maxbufsize": число агрегированных ключевых значений, по умолчанию до 1000000. Поскольку функция выполняет расчет используя оперативную память, функция может требовать большой объем памяти. Если это неприемлемо (если необходимые ресурсы отсутствуют) используйте комбинацию узлов Агрегирование и Объединение вместо данной функции.

  • "skipnan": булево выражение, соответствующее опции "Пропустить отсутствующие значения ключа" узла Агрегирование.

  • "delimiter": строковое выражение, используемое в функции colconcat и соответствующее опции "Строка-разделитель, заданная пользователем" узла Агрегирование.

  • "maxlen": числовое выражение, обозначающее максимальный размер конкатенированного текста (по умолчанию 20 млн. символов).

Аргумент filter не может содержать тегов (#колонки).

Возвращаемое значение

Функция возвращает текстовое значение, содержащее результат конкатенации.

Примеры

Имеется таблица визитов:

Person

Location

Date

Josh

Las Vegas

12-04-2005

Josh

Niagra Falls

06-07-2006

Rich

Niagra Falls

06-07-2006

Bob

China

03-02-2007

Целью является создание таблицы, где каждый человек перечислен только один раз, и их места расположения перечислены в отдельной колонке. Проблема в том ,что из-за схемы в представленном выше примере Джош встречается несколько раз. Предполагается, что здесь необходимо объединение. Мы можем использовать узел Структурная организация или узел Развертка транзакций или узел Агрегирования, используя Имя как ключ агрегирования. Либо, ввиду того, что это простая задача, мы можем использовать функцию SRL colconcat: colconcat (Location, filter:=[Person]="Josh"). Результатом узла Производные колонки будет:

Person

Location

Date

Location_colconcat

Josh

Las Vegas

12-04-2005

Las VegasNiagraFalls

Josh

Niagra Falls

06-07-2006

Las VegasNiagraFalls

Rich

Niagra Falls

06-07-2006

Niagra Falls

Bob

China

03-02-2007

China

Теперь мы можем ссылаться на колонку Location_colconcat, чтобы получить полный список значений Место расположения для Josh. Вы также можете использовать упомянутый ранее узел Производные колонки, чтобы добавить пробел после каждого места расположения и объединить их в новую колонку. Таким образом, ваш результат будет содержать пробел между значениями.