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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.01.2008, 15:28   #1  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от oleg_e Посмотреть сообщение
(inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom && inventTrans.DateFinancial <= dateTo) ||
(!inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom && inventTrans.Date<= dateTo)
Скорее всего в данном случае вполне можно вместо условия по полям DateFinancial и DateExpected написать условие по одной дате DateStatus. Алгоритм заполнения DateStatus в методе inventTrans.setStatusDate().
Старый 10.01.2008, 16:53   #2  
oleg_e is offline
oleg_e
Участник
 
71 / 10 (1) +
Регистрация: 12.01.2006
Адрес: Moscow
Red face
Спасибо всем. Немного конкретезирую запрос (было до этого абстрактно):

while select inventTrans
where ((inventTrans.TransType == InventTransType::Purch) || (inventTrans.TransType == InventTransType::Sales))
&& (includeEstimated || ( ! includeEstimated &&
((inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::Sold) ||
(inventTrans.StatusReceipt == StatusReceipt::Purchased && inventTrans.StatusIssue == StatusIssue::None))))
&& (transByPeriod
&& ((inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom
&& inventTrans.DateFinancial <= dateTo) ||
( ! inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom
&& inventTrans.DateExpected <= dateTo)) || (!transByPeriod))
join ItemCategoryId from inventTable
where inventTable.ItemId == inventTrans.ItemId &&
inventTable.ItemType != ItemType::.....
join DlvInventTripId from inventDim
where inventDim.InventDimId == inventTrans.InventDimId
&& (( ! tripId && inventDim.DlvInventTripId != "") || (tripId && inventDim.DlvInventTripId == tripId))
exists join DlvInventTripId from inventDimTripByPeriod
where inventDimTripByPeriod.[field] == inventDim.[field]
join inventTransByPeriod
where inventTransByPeriod.InventDimId == inventDimTripByPeriod.InventDimId
&& ((inventTransByPeriod.DateFinancial
&& inventTransByPeriod.DateFinancial >= dateFrom
&& inventTransByPeriod.DateFinancial <= dateTo) ||
( ! inventTransByPeriod.DateFinancial
&& inventTransByPeriod.DateExpected >= dateFrom
&& inventTransByPeriod.DateExpected <= dateTo))

Пояснение к запросу
inventTransByPeriod это inventtrnas
inventDimTripByPeriod это inventDim

признаки (NOYES) для запроса:
includeEstimated,transByPeriod
Старый 10.01.2008, 17:34   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Вторая серия, для начала:

1. Индекс на таблицу inventTrans с 3-мя полями DateFinancial, DateExpected, InventDimId

2. Слегка модифицированный запрос

while select inventTrans
where ((inventTrans.TransType == InventTransType::Purch) || (inventTrans.TransType == InventTransType::Sales))
&& (includeEstimated || ( ! includeEstimated &&
((inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::Sold) ||
(inventTrans.StatusReceipt == StatusReceipt::Purchased && inventTrans.StatusIssue == StatusIssue::None))))
&& (transByPeriod
&& ((inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom
&& inventTrans.DateFinancial <= dateTo) ||
( ! inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom
&& inventTrans.DateExpected <= dateTo)) || (!transByPeriod))
join ItemCategoryId from inventTable
where inventTable.ItemId == inventTrans.ItemId &&
inventTable.ItemType != ItemType::.....
join DlvInventTripId from inventDim
where inventDim.InventDimId == inventTrans.InventDimId
&& (( ! tripId && inventDim.DlvInventTripId != "") || (tripId && inventDim.DlvInventTripId == tripId))
exists join DlvInventTripId from inventDimTripByPeriod
where inventDimTripByPeriod.[field] == inventDim.[field]
join inventTransByPeriod
where inventTransByPeriod.InventDimId == inventDimTripByPeriod.InventDimId
&& inventTransByPeriod.DateFinancial <= dateTo
&& ((inventTransByPeriod.DateFinancial
&& inventTransByPeriod.DateFinancial >= dateFrom) ||
( ! inventTransByPeriod.DateFinancial
&& inventTransByPeriod.DateExpected >= dateFrom
&& inventTransByPeriod.DateExpected <= dateTo))
Старый 10.01.2008, 17:37   #4  
NNB is offline
NNB
Участник
 
103 / 12 (1) ++
Регистрация: 31.08.2006
Что будет если запустить запрос на сервере с помощью скажем E...M...?
Обязательно ли использовать While select?
Старый 10.01.2008, 18:52   #5  
oleg_e is offline
oleg_e
Участник
 
71 / 10 (1) +
Регистрация: 12.01.2006
Адрес: Moscow
Alexius,
а нужно ли в запросе использовать волшебные слова forcenestedloop forceselectorder?
Старый 11.01.2008, 09:37   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от oleg_e Посмотреть сообщение
Alexius,
а нужно ли в запросе использовать волшебные слова forcenestedloop forceselectorder?
Это лучше определить экспериментальным путем. Я воздержусь давать универсальную рекомендацию.
Старый 11.01.2008, 10:22   #7  
NNB is offline
NNB
Участник
 
103 / 12 (1) ++
Регистрация: 31.08.2006
Добрый день
Конкретизирую что написал вчера
Как бы я поступил:
1. Понял бы куда уходит время: на создание курсора или движение по нему
2. Если на создание - то проверил бы наличие индексов на полях связи и ограничениях, запустил бы запрос на SQL сервере и постарался оптимизировать там.
3. Если получилось - то постарался бы перенести это в Axaptу. Если не получилось перенести, то постарался бы использовать хранимую процедуру на сервере. Если на сервере запрос работает долго - значит не повезло. Остается только постараться получать промежуточные данные в пакетном режиме и затем использовать их
4. Если задержка вызвана движением по курсору - то постарался бы обойтись без него

Успехов
Теги
оптимизация, производительность, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оптимизация запроса - ranges kashperuk DAX: Программирование 13 31.01.2011 20:19
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Быстродействие запроса Antonuch DAX: Программирование 1 25.01.2008 15:58
Опять оптимизация запроса KpecT DAX: Программирование 3 02.11.2007 14:41
Оптимизация запроса Янка DAX: Программирование 1 27.04.2006 08:37

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

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

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