AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2005, 15:41   #1  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Ускорить расчет
Пакетной обработкой считается средняя реализация понедельно...
Очень долго идет выборка записей, не подскажите есть ли средства ускорения расчета, в частности выборки (while select)
Старый 14.12.2005, 15:59   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
если вопрос ставится настолько обобщенно, то и ответ общий - переносите сложную обработку на сервер приложений (AOS).
__________________
полезное на axForum, github, vk, coub.
Старый 14.12.2005, 17:46   #3  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Профайлер не запускали? Там же все видно. Чаще всего индексов не хватает, или они например могут не работать (на оракле).
Старый 15.12.2005, 07:56   #4  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Да, извините .... вопрос некорректно поставил.

Таблица SalesLine. Рассчитываем среднюю реализацию понедельно. То есть с сегодняшнего дня до начала недели .. потом понедельно. Средняя реализация расчитывается как сумма реализации / количество дней в которых была реализация.

Обратил внимание что while select сначала отбирает весь набор записей за определенный период, тока потом начинает отрабатывать расчет.
СУБД - Oracle.
Старый 15.12.2005, 09:25   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Приведите свой запрос, а то вопрос опять получается общим.

Пока только общие соображения:
Какие поля у вас входят в ORDER BY? Входят ли они в какой-либо индекс?
__________________
Axapta v.3.0 sp5 kr2
Старый 15.12.2005, 09:45   #6  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Код:
while select itemId, inventDimId from salesLine
        group by itemid,inventDimId
            where salesLine.dataAreaId == 'dat'
              && salesLine.SalesStatus == SalesStatus::Invoiced
                && salesLine.ConfirmedDlv >= startDate
                   && salesLine.ConfirmedDlv <= endDate
есть отдельныйиндекс по itemid и inventDimId
Старый 15.12.2005, 10:12   #7  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Цитата:
Обратил внимание что while select сначала отбирает весь набор записей за определенный период, тока потом начинает отрабатывать расчет.
Вот эта фраза мне лично не очень понятна. Куда отбирает и почему он должен отбирать не все? что за расчет?

План запроса смотрели? Индексы работают?
Старый 15.12.2005, 10:44   #8  
Atani is offline
Atani
Участник
 
77 / 15 (1) ++
Регистрация: 25.07.2003
Адрес: г. Королёв М.О.
Может, вам создать индекс на SalesLine по полям (ItemId, InventdimId, SalesStatus, ConfirmedDlv)?

И условие 'where dataareaid == ' - не нужно. Axapta автоматически поставит его в запрос в качестве первого условия. И в индекс dataareaid попадёт первым полем.
Старый 15.12.2005, 10:52   #9  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Попробуйте перестроить вышеуказанный запрос следующим образом:

Код:
select itemId, inventDimId from salesLine
      group by itemId, inventDimId
      exists join salesTable
            where  salesTable.SalesId == salesLine.SalesId 
                && salesTable.SalesStatus == SalesStatus::Invoiced
                && salesLine.dataAreaId == 'dat'
                && salesLine.ConfirmedDlv >= startDate
                   && salesLine.ConfirmedDlv <= endDate;
Этот запрос "шерстит" не всю SalesLine, а только те записи, которые относятся к заказам, по которым проведена накладная.
Старый 15.12.2005, 11:05   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Самый лучший способ ускорить запрос - избавиться от него...
Мне не понятно почему берутся строки заказов, а не накладных, почему берется InvnentDimId, который может сильно не совпадать с реальной аналитикой проводок.
Вобщем, подумайте нужен ли вам этот запрос
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бригадный расчет в DAX 4.0 SP1 dr.Brain DAX: Функционал 1 05.06.2007 10:03
Ввод начислений (RPaySumEmpl) - помогите оптимизировать расчет итогов z_av DAX: Программирование 3 22.02.2005 15:15
Проблема учет плановых затрат и расчет полной плановой себестоимости. AlexUnik DAX: Функционал 13 16.09.2004 10:01
Неправильный расчет отпускных листов Artild DAX: Функционал 1 14.07.2003 11:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:15.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.