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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.10.2009, 00:56   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от ZVV Посмотреть сообщение
Вы имеете ввиду, что результаты никак не сгруппировались вобще и в остальных колонках тоже есть данные? Ну мне кажется это сразу было очевидно, что Аксапта "забыла" сделать груп_бай вообще. Например можно было попробовать вставить не 2, а 3 или 4 строки.

По сути... Проверил на DAX2009 SP1 - результат абсолютно тот же. Реальный баг. Видимо разработчики такой вырожденный случай тупо забыли/не подумали закодить. ))
Почему "вырожденный"? Ну потому что вы по сути хотите выяснить есть ли у вас хоть одна строка со значением "1". С точки зрения производительности и логики я думаю лучше было бы написать этот запрос примерно так:
X++:
    while select firstFast firstOnly Field1 from tmpTable
    where tmpTable.Field1 == '1'
, чем гонять зря группировку...
Так работает...
Не совсем согласен с вырожденностью. Я, например, хочу получить итоговые суммы по отделам, наименования которых начинаются на "OUT*"

X++:
 while select sum (amount) from tmpTable
    group by department
      where tmpTable.department like 'OUT*'
    {
        info(strFmt("%1 - %2", tmpTable.department, tmpTable.amount));
    }
(не знаю, правда, как like поведет себя в данном случае, но не суть)
Старый 13.10.2009, 01:09   #2  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
или скажем узнать кол-во уволенных сотрудников в связи с кризисом по отделам, имеющим признак ="CLOSED"
__________________
The Variable men power.

Последний раз редактировалось Varmen; 13.10.2009 в 01:17.
Старый 13.10.2009, 08:41   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1789 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Varmen Посмотреть сообщение
узнать кол-во уволенных сотрудников в связи с кризисом по отделам, имеющим признак ="CLOSED"
Можно. Вы же сами предложили выход
Цитата:
Сообщение от Varmen Посмотреть сообщение
баг можно побороть, если вставить не явно поле, как я предпологал выше, а функцию агрегации над ним. Тогда аксапта "распознает" что таки надо группировать!
Т.е. такая конструкция всётаки работает
X++:
  while select maxof(Field1), count(RecId) from  t
  group by Field1
   where t.Field1 == '1'
   {
    info(strfmt("fisrt query %1 %2",t.Field1, t.RecId));
   }

Последний раз редактировалось S.Kuskov; 13.10.2009 в 08:59. Причина: поспешил с выводами
Старый 13.10.2009, 09:03   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1789 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Не совсем согласен с вырожденностью. Я, например, хочу получить итоговые суммы по отделам, наименования которых начинаются на "OUT*" (не знаю, правда, как like поведет себя в данном случае)
С like всё теже самые проблемы


А по поводу вырожденности случая - не всегда удобно обробатывать его отдельно. Например, я часто использую в условии запроса такую конструкцию
X++:
((prmValue == "") || (Table.Field1 == prmValue))
Т.е. если пользователь не хочет ограничивать запрос, то он оставляет параметр пустым, иначе должна выбраться только одна группа. Или даже так
X++:
((prmValue == "") || (Table.Field1 like prmValue))


P.S.: Вот сижу сейчас и думаю, как же я раньше на такие грабли не наступал? Может действительно пример искуственен, а в жизни есть какая-то комбинация дополнительных условий, которая всегда спасала?

Последний раз редактировалось S.Kuskov; 13.10.2009 в 09:10.
Старый 13.10.2009, 10:44   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Не совсем согласен с вырожденностью. Я, например, хочу получить итоговые суммы по отделам, наименования которых начинаются на "OUT*"

X++:
 while select sum (amount) from tmpTable
    group by department
      where tmpTable.department like 'OUT*'
    {
        info(strFmt("%1 - %2", tmpTable.department, tmpTable.amount));
    }
(не знаю, правда, как like поведет себя в данном случае, но не суть)
Говоря о вырожденном случае, я имел ввиду случай из примера:
X++:
   while select tmpTable
    group by Field1
    where tmpTable.Field1 == '1'
, где "вы по сути хотите выяснить есть ли у вас хоть одна строка со значением "1"". Приведённый вами пример - это совсем другой, не вырожденный случай, и выше было показано, что при наличии агрегирующих функций в запросе баг не воспроизводится...
К чему придираемся?
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: DSPIC (0).
Теги
bug, баг, временная таблица, запрос (query), ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Временная таблица Antoncheg DAX: Программирование 21 15.08.2008 18:25
производительность: map или временная таблица kitty DAX: Программирование 5 15.11.2007 12:36
Временная таблица + RLS leshy DAX: Программирование 6 27.04.2006 12:39
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16
next и временная таблица Dron AKA andy DAX: Программирование 3 24.04.2003 16:42
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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