Преобразование формул
Разработчики могут возвращать формулы Microsoft Excel из представлений, хранимых процедур или SQL запросов.
Например:
SELECT id , name , qty , price , '=@qty*@price' AS amount ...
Продукты SaveToDB преобразуют такие формулы в расчетные формулы, специфичные для каждой платформы (Excel, DataTable или JavaScript).
Надстройка SaveToDB поддерживает практически все формулы Microsoft Excel. DBEdit, DBGate и ODataDB поддерживают подмножество формул.
Продукты SaveToDB определяют такие формулы по ячейке первой строки, анализируют формулы в колонке, и применяют формулу либо для колонки, либо для каждой ячейки.
ConverFormulas и DoNotConverFormulas
Разработчики могут включить или отключить преобразование формул, используя типы ConvertFormulas и DoNotConverFormulas в таблице xls.handlers.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook5 | balance | ConvertFormulas | ATTRIBUTE | ||||
xls | handlers | HANDLER_CODE | DoNotConvertFormulas | ATTRIBUTE |
Используйте ConvertFormulas для преобразования формул, даже если первая ячейка не содержит формул, как например, начальное сальдо в примере выше.
Используйте DoNotConvertFormulas для отмены преобразования формул, даже если первая ячейка содержит формулу, что, например, возможно в поле HANDLER_CODE.
Formula и FormulaValue
Разработчики могут задать формулы для расчета значений колонки, используя тип Formula и формулы в поле HANDLER_CODE.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s04 | usp_order_form | amount | Formula | ATTRIBUTE | =@qty*@price | |||
s22 | cashbook | amount | DoNotChange | ATTRIBUTE |
Этот случай аналогичен представленному во введении.
Однако, запрос при этом возвращает актуальные данные, а не формулы, и сами формулы вставляются после загрузки. Т.е. метод применим и для таблиц.
Также, сохраняются все строки, значения формул которых изменились.
Это очень мощная возможность для пересчета всех значений колонки.
Пример конфигурации также содержит обработчик DoNotChange. Используйте его для предотвращения ручных изменений.
Вторая возможность - это тип FormulaValue.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s22 | cashbook | modified_by | FormulaValue | ATTRIBUTE | =DomainUserName() | |||
s22 | cashbook | modified_on | FormulaValue | ATTRIBUTE | =NOW() | |||
s22 | cashbook | modified_by | DoNotChange | ATTRIBUTE | ||||
s22 | cashbook | modified_on | DoNotChange | ATTRIBUTE |
В отличие от типа Formula, значения рассчитываются в момент изменения пользователем любой ячейки строки.
Вы можете использовать встроенные формулы Excel и специальные встроенные формулы: =DomainUserName() и =UserName().
Использование формул DDE
Вы можете использовать надстройку для создания панелей с формулами DDE.
Например, ниже представлена конфигурация SQLite для получения данных акций из платформы Thinkorswim, с использованием SQL запроса и таблицы xls.objects:
ID | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | TABLE_CODE | INSERT_OBJECT | UPDATE_OBJECT | DELETE_OBJECT |
---|---|---|---|---|---|---|---|
DDE WatchList | CODE | <SQL code> | WatchList | WatchList | WatchList |
где поле TABLE_CODE содержит следующий SQL запрос:
SELECT Symbol , '=TOS|LAST!' + Symbol AS Last , '=TOS|NET_CHANGE!' + Symbol As NetChange , '=TOS|PERCENT_CHANGE!' + Symbol As Change , '=TOS|HIGH!' + Symbol As High , '=TOS|LOW!' + Symbol As Low , '=SUBSTITUTE(TOS|VOLUME!' + Symbol+'," ","")+0' As Volume FROM WatchList
Помните, что вы можете сохранять данные в SQLite даже в бесплатной редакции SaveToDB.