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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.10.2015, 12:37   #1  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
IN фильтр в while select запросе?
Пользователь выбирает в мультиселекте набор значений.
Потом в коде есть while select , который надо отфильтровать по этому переданному набору значений.

Я могу сделать врем таблицу,заполнить этим набором значений и потом join к while-select.

Появились ли какие-то новые/более симпатичные способы, как это можно выполнить в AX2012?


AX2012 R2
Старый 08.10.2015, 12:50   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Query?..
Старый 08.10.2015, 12:58   #3  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
спасибо, понятно, раз новых нет, старыми костылями придется пользоваться(
Старый 08.10.2015, 14:26   #4  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Query целиком и полностью подходит под данную задачу, и без всяких временных таблиц, зачем изобретать велосипед..
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 08.10.2015, 14:51   #5  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
тк
1) while-select уже существует и переписывать существующую логику в query только для того, чтобы добавить доп условие на 1 поле - имхо, не умно
2) критерии из этого while-select только с extended query ranges можно попробовать запихнуть в query, но по пути еще можно огрести много отладки и багов ....

Последний раз редактировалось kitty; 08.10.2015 в 14:59.
Старый 08.10.2015, 15:16   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Только, делайте временную таблицу TempDB
__________________
Axapta v.3.0 sp5 kr2
Старый 08.10.2015, 15:24   #7  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Query?..
Цитата:
Сообщение от Weez Посмотреть сообщение
Query целиком и полностью подходит под данную задачу, и без всяких временных таблиц, зачем изобретать велосипед..
Query плохое решение.
Старый 08.10.2015, 17:07   #9  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Сообщение от Napalm Посмотреть сообщение
Query плохое решение.
Аргументы?
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 08.10.2015, 17:11   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
«У нас в клубе принято джентльменам верить на слово!» ©
Старый 08.10.2015, 18:18   #11  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от Weez Посмотреть сообщение
Аргументы?
Работает только для небольшого количества записей.
Старый 08.10.2015, 18:42   #12  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Сообщение от Napalm Посмотреть сообщение
Работает только для небольшого количества записей.
Неправда, все работает абсолютно идентично while select, только удобней с точки зрения поддержки и изменения запроса. За редким исключением.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 08.10.2015, 19:40   #13  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от Weez Посмотреть сообщение
Неправда, все работает абсолютно идентично while select, только удобней с точки зрения поддержки и изменения запроса. За редким исключением.
Покажите пример Query, который работает для большого количества произвольных записей.
Старый 08.10.2015, 20:02   #14  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
Старый 08.10.2015, 21:34   #15  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Сообщение от Napalm Посмотреть сообщение
Покажите пример Query, который работает для большого количества произвольных записей.
Мне кажется я начинаю понимать, что вы путаете количество записей с количеством наложенных фильтров, я прав? Если нет, то тогда вас вообще не понимаю, никаких ограничений query от количества записей в таблице мне не известно. А если я прав, то вам уже дважды показали, что следует делать в случае заранее не известного количества фильтрующих записей.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
За это сообщение автора поблагодарили: mazzy (2).
Старый 09.10.2015, 10:03   #16  
Мышелов Федор is offline
Мышелов Федор
Участник
 
26 / 10 (1) +
Регистрация: 26.02.2014
все то что Вы можете написать в обычном запросе Вы так же можете написать и в Query, а если Вам так необходим In в Вашем запросе то переведите его его к виду
(INVENTTABLE.ITEMID == 1 OR INVENTTABLE.ITEMID == 2 OR .......) Query это позволяет
Старый 09.10.2015, 13:30   #17  
Omeo is offline
Omeo
Участник
 
129 / 50 (2) ++++
Регистрация: 18.03.2004
Адрес: Moscow
не забывайте только что все равно есть ограничение по длине
Старый 09.10.2015, 14:03   #18  
Мышелов Федор is offline
Мышелов Федор
Участник
 
26 / 10 (1) +
Регистрация: 26.02.2014
у меня загнулась приблизительно на 4к записях
Старый 09.10.2015, 14:35   #19  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Query и правда не подойдёт, если количество OR может быть очень большим.

В 2012й хорошим вариантом будет создать временную таблицу типа TempDb, наполнять поля ключей, по которым же потом и джойнить. Не забудьте добавить индекс на этой временной таблице по полям джойна.

Если нужно производить джойн по Рекайди (к примеру), то можно воспользоваться стандартной таблицей TmpDataAreaRecidFilter.

Последний раз редактировалось Cardagant; 09.10.2015 в 15:11.
Старый 12.10.2015, 13:05   #20  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от gl00mie Посмотреть сообщение
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
Полное непонимание вопроса.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
Фильтр по пустому Dimension[x] в select Yprit DAX: Программирование 3 05.03.2008 15:11
фильтр lookupа на запросе диалога oleg_e DAX: Программирование 6 12.11.2007 11:01
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Фильтр по enum-полю в select ArturK DAX: Программирование 18 30.03.2004 13:37
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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