AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 02.02.2015, 22:47   #1  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
добавить один Query в другой
коллеги, многократно обсуждавшуюся тему связывания двух запросов хотелось бы поднять вновь.

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

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

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

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

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

всяких разных фильтров и прочих таблиц пользователь может надобавлять безудержно в диалоге отчёта.
__________________
Felix nihil admirari
Old 03.02.2015, 02:53   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Ruff's Avatar
1C
 
475 / 396 (14) ++++++
Join Date: 18.09.2003
Location: Тула
Quote:
Originally Posted by wojzeh View Post
... выбрать только те записи, для которых по тем же itemId и CovInventDimId существуют плановые ордера.
Тут нужно уточнение:
1) существуют в принципе (в таблице)
или
2) существуют в видимой выборке (после фильтров пользователя)?

В первом случае, мне кажется, можно обойтись без склеивания запросов. Просто приджойнить к myQuery1 еще один datasource, скажем, planReqTrans с наложенными фильтрами (которые подразумеваются в addNewRangeValues).
__________________
Old 03.02.2015, 18:00   #3  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
разумеется, вариант номер 2.

по сути требуется добавить все источники данных с отношениями-связями и наложенными фильтрами из первого запроса "под хвост" второму и сделать exists join.
__________________
Felix nihil admirari
Old 04.02.2015, 08:04   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Join Date: 28.04.2007
Location: Калуга
Quote:
Originally Posted by wojzeh View Post
всяких разных фильтров и прочих таблиц пользователь может надобавлять безудержно в диалоге отчёта.
Я не очень понял те танцы с бубнами, которые вы исполняете. Зачем вам два Query? Отображайте пользователю тот запрос по которому потом будете работать, пусть пользователь прямо в него добавляет всё что хочет.
Old 04.02.2015, 17:34   #5  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
Quote:
Originally Posted by S.Kuskov View Post
Я не очень понял те танцы с бубнами, которые вы исполняете. Зачем вам два 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
Old 05.02.2015, 08:20   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Join Date: 28.04.2007
Location: Калуга
Quote:
Originally Posted by wojzeh View Post
но мой вопрос более общ: можно ли проделать такой трюк с любыми запросами.
Ответ в том, что в общем случае запрос, который вы хотите получить, в аксапте не собрать даже заранее. Только если промежуточные View городить, но в runtime - не будете же вы создавать View

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

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

Last edited by S.Kuskov; 05.02.2015 at 08:29.
This post has been rated by: wojzeh (1).
Old 05.02.2015, 18:12   #7  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
Quote:
Originally Posted by S.Kuskov View Post
Ответ в том, что в общем случае запрос, который вы хотите получить, в аксапте не собрать даже заранее. Только если промежуточные View городить, но в runtime - не будете же вы создавать View
вот эту часть я не понял. городить вьюшки не нужно, ведь запрос уже собран. вся пуля в том, чтоб клонировать его и привязать к самому себе

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

Quote:
Originally Posted by S.Kuskov View Post
P.S.: Хотя по той же ссылке, что я привел говорят, что через Query оно должно работать. Нужно пробовать. Готового решения нет, но теоретически можно обойти пользовательский запрос и поэлементно скопировать его к себе.
во! вот именно об этом и речь! делал ли кто-нибудь уже такой поэлементный перенос?
__________________
Felix nihil admirari
This post has been rated by: Logger (1).
Old 05.02.2015, 19:04   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Join Date: 28.11.2005
Location: Москва
Blog Entries: 3
Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.

Last edited by gl00mie; 05.02.2015 at 19:08.
This post has been rated by: wojzeh (1).
Old 05.02.2015, 19:10   #9  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
Quote:
Originally Posted by gl00mie View Post
Вот тут приводится код создания точной копии Query с перебиванием dynalink'ов в range'и. По аналогии можно и обычные range'и копировать, хотя, конечно, придется повозиться.
вот спасибо тебе, мил человек, за эту штуку! это аккурат то, что надо!

не знал, что при стандартной передаче запроса что-то теряется. это ж полный экибастуз!
__________________
Felix nihil admirari
Old 05.02.2015, 21:58   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Join Date: 28.04.2007
Location: Калуга
Quote:
Originally Posted by wojzeh View Post
других экзистенциальных связок там нет.
А пользователь если через интерфейс в фильтр добавляет связанные таблицы - они же через exists добавляются?
Old 05.02.2015, 22:16   #11  
wojzeh is offline
wojzeh
Участник
wojzeh's Avatar
Соотечественники
 
681 / 517 (19) +++++++
Join Date: 27.04.2006
Location: Montreal
Quote:
Originally Posted by S.Kuskov View Post
А пользователь если через интерфейс в фильтр добавляет связанные таблицы - они же через exists добавляются?
не знаю.
__________________
Felix nihil admirari
Tags
query, range, relation, ax2012

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:34.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.