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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.10.2009, 22:28   #1  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
не, не смогу такое привести.
Но ведь Вы мною предложенный вариант попробовали правда? Знаете почему, потому что jobik не работает так как изначально задумали, а причина неизвестна.
__________________
The Variable men power.
Старый 12.10.2009, 22:55   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1789 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
не работает "как задумали" - мягко сказано

Если фильтровать текстовое поле, участвующее в группировке, то group by попросту игнорируется! (причём, например, для целочисленного поля тот же код отрабатывает корректно )

Что я делаю не так?
Кто-нибудь может прокомментрировать такое поведение group by? Это следствие каких-то известных (документированных) ограничений?
И какие ещё сюрпризы от использования временных таблиц можно ожидать?
Старый 12.10.2009, 23:21   #3  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
могу подвердить, зашел на нашу систему, также исполняется два раза.
Ах4.0сп2
__________________
The Variable men power.
Старый 12.10.2009, 23:24   #4  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
баг можно побороть, если вставить не явно поле, как я предпологал выше, а функцию агрегации над ним. Тогда аксапта "распознает" что таки надо группировать!

X++:
  while select maxof(Field1) from  t
  group by Field1
   where t.Field1 == '1'
   {
    info(strfmt("fisrt query %1",t.Field1));
   }
__________________
The Variable men power.

Последний раз редактировалось Varmen; 12.10.2009 в 23:34.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 12.10.2009, 23:29   #5  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
X++:
static void Job10(Args _args)
{
 TempDummyTable t;
 ;
ttsbegin;
   t.Field1="1";
   t.insert();
ttscommit;
ttsbegin;
   t.Field1="1";
   t.insert();
ttscommit;
 
   
   while select maxof(Field1) from  t
  group by Field1
   where t.Field1 == '1'
   {
    info(strfmt("fisrt query %1",t.Field1));
   }
 
    while select t
  group by Field1
  where t.Field1 == '1'
   {
    info(strfmt("second query %1",t.Field1));
   }
}
Сообщение (21:28:38)
fisrt query 1
second query 1
second query 1
__________________
The Variable men power.
Старый 12.10.2009, 23:39   #6  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
Ну что смеемся дальше?
добавим поле Фиелд2
X++:
static void Job10(Args _args)
{
 TempDummyTable t;
 ;
ttsbegin;
   t.Field1="1";
   t.Field2="2";
   t.insert();
ttscommit;
ttsbegin;
   t.Field1="1";
   t.Field2="4";
   t.insert();
ttscommit;
 
   
   while select maxof(Field1) from  t
  group by Field1
   where t.Field1 == '1'
   {
    info(strfmt("fisrt query %1--%2",t.Field1,t.Field2));
   }
 
    while select t
  group by Field1
  where t.Field1 == '1'
   {
    info(strfmt("second query %1--%2",t.Field1,t.Field2));
   }
}
Сообщение (21:37:37)
fisrt query 1--
second query 1--2
second query 1--4

Ну куда группировка делась, во втором случае?
__________________
The Variable men power.
Старый 12.10.2009, 23:45   #7  
Varmen is offline
Varmen
Участник
 
190 / 13 (1) ++
Регистрация: 02.10.2007
ну и под занавес, мой любимый RecId itd
X++:
static void Job10(Args _args)
{
 TempDummyTable t;
 ;
ttsbegin;
   t.Field1="1";
   t.Field2="2";
   t.insert();
ttscommit;
ttsbegin;
   t.Field1="1";
   t.Field2="4";
   t.insert();
ttscommit;
 
 
   while select maxof(Field1) from  t
  group by Field1
   where t.Field1 == '1'
   {
    info(strfmt("fisrt query %1--%2",t.Field1,t.Field2));
   }
 
    while select t
  group by Field1
  where t.Field1 == '1'
   {
    info(strfmt("second query %1--%2--%3",t.Field1,t.Field2,t.RecId));
   }
}
 
 (21:44:51)
fisrt query 1--
second query 1--2--1328
second query 1--4--1376
__________________
The Variable men power.
Старый 13.10.2009, 00:13   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Varmen Посмотреть сообщение
....
Ну куда группировка делась, во втором случае?
Вы имеете ввиду, что результаты никак не сгруппировались вобще и в остальных колонках тоже есть данные? Ну мне кажется это сразу было очевидно, что Аксапта "забыла" сделать груп_бай вообще. Например можно было попробовать вставить не 2, а 3 или 4 строки.

По сути... Проверил на DAX2009 SP1 - результат абсолютно тот же. Реальный баг. Видимо разработчики такой вырожденный случай тупо забыли/не подумали закодить. ))
Почему "вырожденный"? Ну потому что вы по сути хотите выяснить есть ли у вас хоть одна строка со значением "1". С точки зрения производительности и логики я думаю лучше было бы написать этот запрос примерно так:
X++:
    while select firstFast firstOnly Field1 from tmpTable
    where tmpTable.Field1 == '1'
, чем гонять зря группировку...
Так работает...
__________________
Zhirenkov Vitaly
Теги
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, время: 18:54.