Предки: TssDataProducer
.
В качестве входных данных используется объект-наследник от TssDataProducer
. Далее к входным данным может быть применены (в любых сочетаниях):
фильтрация;
сортировка;
группировка (в том числе многоуровневая); при этом:
Записи упорядочиваются согласно их принадлежности к группам;
Сортировка применяется отдельно внутри каждой группы;
В результирующем TssComplexDataStorage
создаются соответствующие служебные записи и заполняются соответствующие свойства.
организация в дерево; при этом:
Записи упорядочиваются в порядке прямого обхода дерева;
Сортировка применяется отдельно внутри каждого узла;
В результирующем TssComplexDataStorage
заполняются соответствующие свойства.
Вычисление агрегатных функций (как в целом по всем записям, так и по отдельным группам) и сохранение результатов в результирующем TssComplexDataStorage
(в добавляемых служебных записях);
Добавление к результирующему TssComplexDataStorage
дополнительных вычисляемых полей.
Правила обработки входных данных находятся в свойстве LSQL
. Дополнительные условия фильтрации находятся в свойстве ManualFilter
. Объединяя эти два свойства, получаем строку, имеющую синтаксис, сходный с синтаксисом SQL инструкции . Формат строки:
SELECT [<дополнительные вычисляемые поля>] FROM source alias [<выражение where>] [<выражение compute>] […n] ] [<выражение order by>] <дополнительные вычисляемые поля> ::= выражение AS псевдоним [{ASC|DESC}] [, …n] <выражение where> ::= WHERE условие. <выражение compute> ::= COMPUTE [агрегатная функция AS псевдоним [, …n]] BY [имя поля [ASC|DESC] [, …n]] <выражение order by> ::= ORDER BY имя поля [ASC|DESC] [, …n]
<выражение compute>
служит как для указания полей группировки (если не относится ко всем данным), так и для указания агрегатных функций, применяемых к этой группировке (или в целом ко всем данным, если поля группировки не заданы).
Если задана группировка, то <выражение order by>
в качестве ведущих (первых в списке) полей сортировки должно включать поля группировки.