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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2015, 22:47   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
добавить один Query в другой
коллеги, многократно обсуждавшуюся тему связывания двух запросов хотелось бы поднять вновь.

имею желание запустить тот же запрос по результатам работы первого, и мыслится мне в этой связи следующая конструкция.
...
myQuery2 = new Query(myQuery1);
this.addNewRangeValues(myQuery1); // тут мои запросы становятся разными, myQuery1 делает более узкую выборку.

this.addExistsJoin(myQuery2, myQuery1); // а вот тут я хочу, чтобы мой первый, более узкий запрос прилепился к хвосту с условием exists join.

какие будут соображения?

дополнительные детали.

коренная таблица reqTrans, из которой хочу выбрать только те записи, для которых по тем же itemId и CovInventDimId существуют плановые ордера.

всяких разных фильтров и прочих таблиц пользователь может надобавлять безудержно в диалоге отчёта.
__________________
Felix nihil admirari
Старый 03.02.2015, 02:53   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от wojzeh Посмотреть сообщение
... выбрать только те записи, для которых по тем же itemId и CovInventDimId существуют плановые ордера.
Тут нужно уточнение:
1) существуют в принципе (в таблице)
или
2) существуют в видимой выборке (после фильтров пользователя)?

В первом случае, мне кажется, можно обойтись без склеивания запросов. Просто приджойнить к myQuery1 еще один datasource, скажем, planReqTrans с наложенными фильтрами (которые подразумеваются в addNewRangeValues).
__________________
Старый 03.02.2015, 18:00   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
разумеется, вариант номер 2.

по сути требуется добавить все источники данных с отношениями-связями и наложенными фильтрами из первого запроса "под хвост" второму и сделать exists join.
__________________
Felix nihil admirari
Старый 04.02.2015, 08:04   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от wojzeh Посмотреть сообщение
всяких разных фильтров и прочих таблиц пользователь может надобавлять безудержно в диалоге отчёта.
Я не очень понял те танцы с бубнами, которые вы исполняете. Зачем вам два Query? Отображайте пользователю тот запрос по которому потом будете работать, пусть пользователь прямо в него добавляет всё что хочет.
Старый 04.02.2015, 17:34   #5  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я не очень понял те танцы с бубнами, которые вы исполняете. Зачем вам два Query? Отображайте пользователю тот запрос по которому потом будете работать, пусть пользователь прямо в него добавляет всё что хочет.
именно, что не понял. (давай на ты, интернет всё-таки).

пользователь видит тот запрос, по которому всё выводится, и все нужные фильтры туда добавляет.

проблема в том, чтобы потом из таблицы reqTrans мне нужно разложить строки во временную таблицу, которая "кормит" отчёт, по столбцам в соответствии со значением refType.

среди прочих параметров, доступных пользователю есть "показывать пустые строки", который решает, выводить ли всё содержимое или только те, где колонка "запланировано" не пуста.

сейчас я запускаю запрос как есть, а потом "прибиваю" ненужные строки прямо во времянке.

X++:
/// <summary>
/// Gets the data from <c>cgiCutOrderReportTmp</c> for those only with planned transactions.
/// </summary>
/// <returns>
/// The <c>cgiCutOrderReportTmp</c> temporary table.
/// </returns>
private void getCgiCutOrderReportTmpPlannedOnly()
{
    cgiCutOrderReportTmp    cgiCutOrderReportTmpPlanned;
    delete_from cgiCutOrderReportTmp
    notexists join cgiCutOrderReportTmpPlanned
        where   cgiCutOrderReportTmpPlanned.ItemId  == cgiCutOrderReportTmp.ItemId
             && cgiCutOrderReportTmpPlanned.cgiInventColorId  == cgiCutOrderReportTmp.cgiInventColorId
             && cgiCutOrderReportTmpPlanned.cgiQtyPlanned;
}
но мой вопрос более общ: можно ли проделать такой трюк с любыми запросами.
__________________
Felix nihil admirari
Старый 05.02.2015, 08:20   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от wojzeh Посмотреть сообщение
но мой вопрос более общ: можно ли проделать такой трюк с любыми запросами.
Ответ в том, что в общем случае запрос, который вы хотите получить, в аксапте не собрать даже заранее. Только если промежуточные View городить, но в runtime - не будете же вы создавать View

Проблема с реализацией Exists/notexists join.
AX2009. Не используйте NotExists

P.S.: Хотя по той же ссылке, что я привел говорят, что через Query оно должно работать. Нужно пробовать. Готового решения нет, но теоретически можно обойти пользовательский запрос и поэлементно скопировать его к себе.

Последний раз редактировалось S.Kuskov; 05.02.2015 в 08:29.
За это сообщение автора поблагодарили: wojzeh (1).
Старый 05.02.2015, 18:12   #7  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ответ в том, что в общем случае запрос, который вы хотите получить, в аксапте не собрать даже заранее. Только если промежуточные View городить, но в runtime - не будете же вы создавать View
вот эту часть я не понял. городить вьюшки не нужно, ведь запрос уже собран. вся пуля в том, чтоб клонировать его и привязать к самому себе

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Проблема с реализацией Exists/notexists join.
AX2009. Не используйте NotExists
других экзистенциальных связок там нет. за ссылку спасибо.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
P.S.: Хотя по той же ссылке, что я привел говорят, что через Query оно должно работать. Нужно пробовать. Готового решения нет, но теоретически можно обойти пользовательский запрос и поэлементно скопировать его к себе.
во! вот именно об этом и речь! делал ли кто-нибудь уже такой поэлементный перенос?
__________________
Felix nihil admirari
За это сообщение автора поблагодарили: Logger (1).
Старый 05.02.2015, 19:04   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.

Последний раз редактировалось gl00mie; 05.02.2015 в 19:08.
За это сообщение автора поблагодарили: wojzeh (1).
Старый 05.02.2015, 19:10   #9  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.
вот спасибо тебе, мил человек, за эту штуку! это аккурат то, что надо!

не знал, что при стандартной передаче запроса что-то теряется. это ж полный экибастуз!
__________________
Felix nihil admirari
Старый 05.02.2015, 21:58   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от wojzeh Посмотреть сообщение
других экзистенциальных связок там нет.
А пользователь если через интерфейс в фильтр добавляет связанные таблицы - они же через exists добавляются?
Старый 05.02.2015, 22:16   #11  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А пользователь если через интерфейс в фильтр добавляет связанные таблицы - они же через exists добавляются?
не знаю.
__________________
Felix nihil admirari
Теги
query, range, relation, ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
fatihdemirci: Lookup’ta join ile query yazmak Blog bot DAX Blogs 1 29.08.2010 13:35
fatihdemirci: CrossCopmany ile query yazmak Blog bot DAX Blogs 0 17.08.2010 16:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Как добавить к запросу еще один источник по EXISTS JOIN Lucky13 DAX: Программирование 6 29.11.2005 15:05
Как в query добавить фильтр по аналитике (Dimension)? Roman812 DAX: Программирование 21 15.07.2005 09:53
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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