2016-12-01 7 views
0

У нас есть лист с расширением Excel, который по горизонтали учитывает все рассматриваемые финансовые периоды (13, один год плюс один месяц) и вертикально список кодов товаров. Пересекающиеся ячейки содержат проданное количество в этот период статьи, используя транзакции Главной книги в Exact Online.Производительность многих формул Exact Online для транзакций продаж

Перечень кодов статей, количества акций и продаж заполняется через следующий запрос:

select code_attr 
,  '=i_eol_itm_description(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' rownum 
,  '=I_EOL_ITM_SALES_PRICE_VALUE(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' dateend 
,  '=I_EOL_ITM_COSTS_PRICE_VALUE(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' datestart 
,  '=I_EOL_ITM_SALES_UNIT_DESCRIPTION(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' assortment_glrevenue_code_attr 
,  '=$C{D,.,.,.+2,.}-$C{D,.,.,.+1,.}'        assortment_glrevenue_type_attr 
,  '=0' assortment_glrevenue_balanceside_attr 
,  '=I_EOL_STOCK_CURRENT_QUANTITY(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")' ispurchaseitem 
,  '=I_EOL_STOCK_PLANNING_IN(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")'  issalesitem 
,  '=I_EOL_STOCK_PLANNING_OUT(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")'  isstockitem 
,  '=I_EOL_STOCK_PROJECTED_QUANTITY(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")' assortment_glrevenue_balancetype_attr 
,  '=$C{D,.,.,.-1,.}*$C{D,.,.,.-5,.}' assortment_glrevenue_description 
... 
from exactonlinexml..items 
order 
by  code_attr 

С 750 статей и 13 периодов, операции General Ledger доступны тысячи раз. Получение транзакционной информации Главной книги в Exact Online через XML API выполняется медленно при поиске транзакций статьи, так как сначала необходимо загрузить все транзакции журнала продаж, а затем отфильтровать те, у которых нет кода статьи (50%), и суммировать их количество продаж.

Время работы составляет 45 минут, а еще хуже, когда API Exact Online работает медленно.

Как я могу улучшить время, необходимое для заполнения таблицы?

ответ

0

Время работы сократилось до нескольких минут для указанного объема данных с помощью триггера на уровне модели. Этот триггер запускает SQL заявление, которое использует точный Интернет REST API для получения суммарных объемов информации GL сделки:

create or replace table [email protected] 
as 
select itemcode 
,  mnd 
,  sum(qty) qty 
from (select itemcode 
     ,  year(date) * 12 + month(date) mnd 
     ,  quantity qty 
     from TransactionLines 
     where journalcode = '70' 
     and itemcode is not null 
     and date > to_date('20160101', 'yyyymmdd') 
     ) 
group 
by  itemcode 
,  mnd 

Затем, вместо того, чтобы использовать I_EOL_GLTXN формулы Excel, я использовал следующую формулу:

select code_attr 
,  '=i_eol_itm_description(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' rownum 
,  '=I_EOL_ITM_SALES_PRICE_VALUE(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' dateend 
,  '=I_EOL_ITM_COSTS_PRICE_VALUE(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' datestart 
,  '=I_EOL_ITM_SALES_UNIT_DESCRIPTION(eoldivision,$C{D,.,.,^,.},"ALL_ROWS")' assortment_glrevenue_code_attr 
,  '=$C{D,.,.,.+2,.}-$C{D,.,.,.+1,.}'        assortment_glrevenue_type_attr 
,  '=0' assortment_glrevenue_balanceside_attr 
,  '=I_EOL_STOCK_CURRENT_QUANTITY(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")' ispurchaseitem 
,  '=I_EOL_STOCK_PLANNING_IN(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")'  issalesitem 
,  '=I_EOL_STOCK_PLANNING_OUT(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")'  isstockitem 
,  '=I_EOL_STOCK_PROJECTED_QUANTITY(eoldivision,$C{D,.,.,^,.},,"ALL_ROWS")' assortment_glrevenue_balancetype_attr 
,  '=$C{D,.,.,.-1,.}*$C{D,.,.,.-5,.}' assortment_glrevenue_description 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & m$11)' assortment_glcosts_code_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & n$11)' assortment_glcosts_type_att 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & o$11)' assortment_glcosts_balanceside_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & p$11)' assortment_glcosts_balancetype_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & q$11)' assortment_glcosts_description 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & r$11)' assortment_glpurchase_code_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & s$11)' assortment_glpurchase_type_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & t$11)' assortment_glpurchase_balanceside_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & u$11)' assortment_glpurchase_balancetype_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & v$11)' assortment_glpurchase_description 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & w$11)' assortment_glpurchasepricedifference_code_attr 
,  '=i_sql_select_scalar("qty", "[email protected]", "itemcode=' || chr(39) || '" & $C{D,.,.,^,.} & "' || chr(39) || ' and mnd = " & x$11)' assortment_glpurchasepricedifference_type_attr 
,  '=SUM($C{D,.,.,.-12,.}:$C{D,.,.,.-1,.})' assortment_glpurchasepricedifference_balanceside_attr 
,  '=$C{D,.,.,.-1,.}/12' assortment_glpurchasepricedifference_balancetype_attr 
from exactonlinexml..items 
order 
by  code_attr 

i_sql_select_scalar получает точное количество продаж в режиме реального времени из таблицы с итогами.

Добавление all_rows в качестве намека на выполнение таких формул, как I_EOL_STOCK_CURRENT_QUANTITY, предусматривает, что все элементы загружаются в память как одна большая партия по первой оцениваемой формуле. Хотя для вычисления первой формулы требуется больше времени, она по всем формулам значительно быстрее. Вместо 750 изъятий отдельного элемента (API XML иногда занимает до 600 мс каждый), теперь для получения информации об элементе в Excel требуется примерно 1 минуту.