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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.08.2005, 08:02   #1  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
? Как ускорить запрос
while select sum(amount),payPeriod,sourceDate from RPayTrans group By sourceDate
where RPayTrans.payPeriod == payPeriod &&
RpayTrans.PayPeriod <= RpayParameters::PayPeriod()
exists join RPayTable
where RPayTable.payCtype == RPayTrans.payCtype &&
RPayTable.rpayTaxIncomeCode == incomeCode
exists join emplTableLocal
where emplTableLocal.emplId == RPayTrans.emplid &&
(emplTableLocal.payMainEmplId_Ru == emplId ||
emplTableLocal.emplId == emplId)
{
incomeValue += RPayTrans.amount;
incomePercentage = RPayRateTable::find(RpayTaxParameters::find().incomePercentage).GetValue(RPayTrans.sourceDate,emplId)/100;
discountValue += round(RPayTrans.amount * incomePercentage,RpayTaxParameters::find().taxRound);
}
Подскажите как упростить и ускорить выполнение такого запроса???
Старый 12.08.2005, 09:10   #2  
sia is offline
sia
Участник
 
26 / 15 (1) ++
Регистрация: 14.07.2005
Адрес: Москва
Попробуйте без exists join

PHP код:
    while select sum(amount),payPeriod,sourceDate from RPayTrans
        group By sourceDate
        where RPayTrans
.payPeriod               == payPeriod
           
&& RpayTrans.PayPeriod               <= RpayParameters::PayPeriod()
    
join count(RecIdfrom RPayTable
        where RPayTable
.payCtype                == RPayTrans.payCtype
           
&& RPayTable.rpayTaxIncomeCode       == incomeCode
    join count
(RecIdfrom emplTableLocal
        where emplTableLocal
.emplId             == RPayTrans.emplid
           
&&(emplTableLocal.payMainEmplId_Ru   == emplId
           
|| emplTableLocal.emplId             == emplId
Старый 12.08.2005, 09:12   #3  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Спасибо....
но это может как то повлият на результат?
Старый 12.08.2005, 09:25   #4  
sia is offline
sia
Участник
 
26 / 15 (1) ++
Регистрация: 14.07.2005
Адрес: Москва
на результат это не повлияет.
+ если вы не используете функциональность с основным номером сотрудника, т.е. для всех сотрудников у вас emplId = payMainEmplId_Ru, то лучше убрать это условие из запроса:
PHP код:
    while select sum(amount),payPeriod,sourceDate from RPayTrans
        group By sourceDate
        where RPayTrans
.payPeriod               == payPeriod
           
&& RpayTrans.PayPeriod               <= RpayParameters::PayPeriod()
           && 
RpayTrans.Emplid                  == emplId
    join count
(RecIdfrom RPayTable
        where RPayTable
.payCtype                == RPayTrans.payCtype
           
&& RPayTable.rpayTaxIncomeCode       == incomeCode 
Старый 12.08.2005, 09:32   #5  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Спасибо большое...
я тоже об этом подумал....
сейчас проверяю есть ли расхождения....
Спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Как ускорить запрос? 6apcyk DAX: Программирование 2 12.01.2006 17:48
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:55.