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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.01.2006, 16:16   #1  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
физ остаток на дату:

select sum(Qty) from inventTrans
where
inventTrans.ItemId == "MyItem" &&
inventTrans.DatePhysical <= dateTo &&
inventTrans.StatusIssue <= StatusIssue:educted &&
inventTrans.StatusReceipt<= StatusReceipt::Receipt
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId &&
inventDim.InventLocationId == "MyLocation";
За это сообщение автора поблагодарили: belugin (3).
Старый 31.01.2006, 01:03   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от UNRW
физ остаток на дату:

select sum(Qty) from inventTrans
where
inventTrans.ItemId == "MyItem" &&
inventTrans.DatePhysical <= dateTo &&
inventTrans.StatusIssue <= StatusIssue:educted &&
inventTrans.StatusReceipt<= StatusReceipt::Receipt
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId &&
inventDim.InventLocationId == "MyLocation";
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2006, 07:45   #3  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Цитата:
Сообщение от mazzy
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
Прочитал, понял, спасибо).

Все равно медленно.
Старый 31.01.2006, 09:32   #4  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Bars
Прочитал, понял, спасибо).

Все равно медленно.
Может опишешь задачу полностью? Другими словами - на фига тебе остатки на дату в форме, да ещё и быстро ???
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 31.01.2006, 09:52   #5  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от mazzy
Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
В этой статье рассмотрен механизм работы стандартных классов, что наверное тоже не бесполезно. Но эти классы ещё можно как-то использовать для расчета остатков на дату по одной номенклатуре. Но для 10000 позиций это уже не будет работает даже для "игрушечных" данных, созданных за несколько месяцев.
Наиболее правильным вариантом является создание отдельной OLAP-базы, в которую с ежедневной периодичностью переносятся нужные данные из axapta. По этой базе уже и строятся отчеты по остаткам на дату. При этом понятно, что будет запаздывание, поэтому текущие остатки нужно брать из Axapta.
Однако в качестве промежуточного решения я бы всё же использовал запрос "с начала времен". Его план выполнения по-крайней мере можно оптимизировать средствами СУБД (Oracle)...
За это сообщение автора поблагодарили: Recoilme (3).
Старый 31.01.2006, 13:20   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,666 / 1172 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
Вообще-то, даже чисто логически, вывод будет прямо противополжным. Одна групповая команда по всякому быстрее работает чем куча одиночных команд в цикле. Но это все теория. Пару месяцев назад я делал практическую проверку

30 тысяч артикулов. Рассчитать остаток для каждого артикула на начало мая 2005 года по 2 фиксированным складам (InventLocationId). Это около 2 миллионов складских проводок

InventSumDatePhysicalDim:: onHandQty() - отработал примерно за 50 минут
Прямой запрос в Query Analyzer по схеме: InventSum - SUM(InventTrans) выполнился за 2 минуты (т.е. остаток на сегодня минус все складские проводки до интересующей даты)

Даже с учетом того, что при переносе запроса в синтаксис AXAPTA он слегка "притормозит", все равно ускорение получаю в разы

Конечно, это несколько не то, что предложил UNRW. Я иду не "с начала времен", а от текущей даты назад. Но, по большому счету, на вывод это не влияет.

Если речь идет о расчете остатка для нескольких артикулов, можно использовать классы семейства InventSumDate. Если же речь идет о массовом расчете остатков по большому количеству артикулов, то следует искать обходные пути. Классы для этого слишком медленные.
Старый 31.01.2006, 13:26   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов
Вообще-то, даже чисто логически, вывод будет прямо противополжным. Одна групповая команда по всякому быстрее работает чем куча одиночных команд в цикле.
1. Вы почему то обсуждаете конкретную реализацию, а не принцип. Принцип - считаем проводки от конца, а не от начала времен.
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату. Запрос UNRW является неправильным, поскольку не учитывает параметры в группе аналитики. Но я это дело пропустил, поскольку посчитал неважным.

ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке?

Еще раз: уважаемые, подумайте.
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2006, 14:40   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,666 / 1172 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy
1. Вы почему то обсуждаете конкретную реализацию, а не принцип. Принцип - считаем проводки от конца, а не от начала времен.
Как минимум, спорный.

Если структура базы корректна, то, должно быть все-равно идем с начала в конец или с конца в начало. Результат должен быть одинаковый. По крайней мере в штуках.

Если же рассматривается вопрос, что "с начала времен" просто физически больше записей и, как следствие, уйдет больше времени на их обработку, то опять все зависит от конкретных условий.

В общем случае, от текущей даты будет быстрее. А в конкретном, надо смотреть на месте.

Цитата:
Сообщение от mazzy
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату.
...
ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке?
Не знаю, у меня как раз пользователи хотят получить остатки не в разрезе складской аналитики, а по конкретному реквизиту аналитики. Т.е. "вообще все остатки вот по этому складу". Просто соответствующий фильтр на InventDim.

Или что Вы понимаете под термином "аналитика номенклатуры" применительно к расчету остатков?
Старый 31.01.2006, 14:46   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов
Т.е. "вообще все остатки вот по этому складу". Просто соответствующий фильтр на InventDim.

Или что Вы понимаете под термином "аналитика номенклатуры" применительно к расчету остатков?
Извините. Сейчас используется термин Складская аналитика.
Конурация, Цвет, Размер, Склад, Ячейка, Партия, ... ГТД(!)

Я не верю, что для всех аналитик пользователи будут хотеть "получить остатки не в разрезе складской аналитики, а по конкретному реквизиту аналитики"

Конечно, если у вас используется ТОЛЬКО склад...
Причем НЕ БЫВАЕТ аналитики с выключенным складом (обычно это услуги)...
Если ваши пользователи НЕ ХОТЯТ видеть отчет в разрезе всех (или нескольких выбранны) аналитик...
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2006, 15:16   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,666 / 1172 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy
Я не верю, что для всех аналитик пользователи будут хотеть "получить остатки не в разрезе складской аналитики, а по конкретному реквизиту аналитики"
...
Если ваши пользователи НЕ ХОТЯТ видеть отчет в разрезе всех (или нескольких выбранны) аналитик...
Видимо, мне пока везет (или не везет, это как посмотреть). Но именно это от меня и хотят (или пользователи не хотят)

Хорошо. Если говорить "в общем случае". Почему при расчете остатка на дату от текущей даты назад в разрезе складских аналитик недостаточно будет добавить группировку по соответствующим полям InventDim?

Т.е. логика та же, что и в классе: берем текущий остаток по InventSum, из него вычитаем сумму InventTrans до нужной даты. Это 2 последовательных запроса.

Каждый запрос имеет группировку по нужным полям InventDim.

Какие здесь проблемы? Чем это принципиально отличается от работы классов InventSumDate?
Теги
остатки, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Скачут остатки Def DAX: Программирование 3 03.05.2006 14:27
Цена на дату создания заказа/закупки George Nordic DAX: Функционал 2 29.06.2005 15:56
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25

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

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

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