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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.10.2015, 12:37   #1  
kitty is offline
kitty
Участник
 
364 / 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
Участник
 
364 / 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
Участник
 
364 / 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:24   #6  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Query?..
Цитата:
Сообщение от Weez Посмотреть сообщение
Query целиком и полностью подходит под данную задачу, и без всяких временных таблиц, зачем изобретать велосипед..
Query плохое решение.
Старый 08.10.2015, 17:07   #7  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Сообщение от Napalm Посмотреть сообщение
Query плохое решение.
Аргументы?
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 08.10.2015, 18:18   #8  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от Weez Посмотреть сообщение
Аргументы?
Работает только для небольшого количества записей.
Старый 08.10.2015, 18:42   #9  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Сообщение от Napalm Посмотреть сообщение
Работает только для небольшого количества записей.
Неправда, все работает абсолютно идентично while select, только удобней с точки зрения поддержки и изменения запроса. За редким исключением.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 08.10.2015, 15:16   #10  
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, 20:02   #12  
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 с дополнительной таблицей.
Старый 12.10.2015, 13:05   #13  
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 с дополнительной таблицей.
Полное непонимание вопроса.
Старый 12.10.2015, 13:41   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Napalm Посмотреть сообщение
Полное непонимание вопроса.
Бггг!!! Napalm, жжоте. Тупо жжоте.

Да, надо разделить вопрос:
= Query vs while select
= in vs range

Query надо использовать ВСЕГДА!
По построению - Query, это программный объект, который позволяет программисту при помощи методов строить и менять запрос. А также (!) использовать переменные условия на переменное число полей. UPD: в том числе добавлять таблицы и условия может и пользователь (!!!!), если ему дали такие права, а программист предоставил соответствующий диалог (как правило, пара методов).

while select - немодифицируемый оператор языка. программист не может изменить запрос, написанный при помощи while select. Делать "переменный" или "модифицируемый" while select - это ссать против ветра.

======================
in - отсутствует в Аксапте
в аксапте присуствует range, сводящийся к OR, AND, NOT

использовать range на "большом числе условий" - ссать против ветра. можно, но мокро.
В Аксапте предлагается использовать временную (в некоторых случаях постоянную) таблицу. См. обсуждения вариантов.

===============================
Цитата:
Сообщение от kitty Посмотреть сообщение
тк
1) while-select уже существует и переписывать существующую логику в query только для того, чтобы добавить доп условие на 1 поле - имхо, не умно
Бгггг.... Я бы после такого заявления уволил

Цитата:
Сообщение от Napalm Посмотреть сообщение
Query плохое решение.
Бггг... туда же

Цитата:
Сообщение от Cardagant Посмотреть сообщение
Query и правда не подойдёт, если количество OR может быть очень большим.
А не надо использовать query для большого числа OR (как и для большого числа элементов в IN)
даже до того, как вы упретесь в ограничение длины строки, SQL перестанет оптимизировать план запроса для очень большого числа условий.

странно даже, вроде в реальной жизни никто ножом дрова не колет... а колуном не затачивает карандаши... а с select и Query - полно желающих.

Последний раз редактировалось mazzy; 12.10.2015 в 13:59.
За это сообщение автора поблагодарили: Михаил Андреев (1), gl00mie (1), Weez (1), Cardagant (1).
Старый 12.10.2015, 17:22   #15  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от mazzy Посмотреть сообщение
Query надо использовать ВСЕГДА!
LOL.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Бгггг.... Я бы после такого заявления уволил
Цитата:
Сообщение от mazzy Посмотреть сообщение
Бггг... туда же
Я бы к такому "знатоку" работать не пошел.
Старый 13.10.2015, 13:48   #16  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от mazzy Посмотреть сообщение
Бггг!!! Napalm, жжоте. Тупо жжоте.
А не надо использовать query для большого числа OR (как и для большого числа элементов в IN)
даже до того, как вы упретесь в ограничение длины строки, SQL перестанет оптимизировать план запроса для очень большого числа условий..
mazzy, хотел бы пояснить. Вы абсолютно правы и я даже и не думал не соглашаться по поводу того, что квери очень даже полезен в использовании в большинстве случаев.

Но иногда бывает, к примеру, нужно сделать форму, которая представляет собой ограничение записей одного набора таблиц по мультиселекту записей вызывающией формы (когда количество выбранных записей может быть любым, соответственно критерий заранее неизвестной длины). В данном случае, на мой взгляд, предложенный мною вариант подошёл бы.

Последний раз редактировалось Cardagant; 13.10.2015 в 13:58.
Старый 08.10.2015, 17:11   #17  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
«У нас в клубе принято джентльменам верить на слово!» ©
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 13:51.