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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2022, 09:57   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Да, будет разное количество.


Цитата:
Сообщение от DesparioN Посмотреть сообщение
программируемых полей
как всегда в программистских задачах:

помните, что группировка по полю без индекса - это Table scan.
т.е. вам нужно подумать не как запрограммировать в Аксапте универсальный запрос.
а о том, как сделать ваш код в целом быстрым и эффективным. возможно, стоит даже не ограничиться только SQL, а по-другому распределить нагрузку между SQL и AOS.

уверяю вас, "универсальные запросы по произвольным полям" - это зло.

лучше переделайте вашу схему данных.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 23.05.2022 в 10:02.
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 23.05.2022, 23:50   #2  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Еще помучаю, если можно. Написал запрос.
В итоге, если:
1) взять COUNT(Field) order by Field DESC, то получается 2.
2) Если перебором, то получается 3
3) если в п.1 добавить фильтр по номенклатуре e которой реально 3, то получается 3.

С чем это может быть связано?

Для справки, если это может быть важно, Field - string
Старый 24.05.2022, 07:30   #3  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,895 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Еще помучаю, если можно. Написал запрос.
В итоге, если:
1) взять COUNT(Field) order by Field DESC, то получается 2.
2) Если перебором, то получается 3
3) если в п.1 добавить фильтр по номенклатуре e которой реально 3, то получается 3.
Все таки уточню задачу. Я так понимаю, у вас есть что-то типа таблицы товародвижений. Первое поле - некое ключевое поле (типа клиента или номенклатуры), второе поле - что-то считающееся транзакционным - может быть дата, может быть код номенклатуры (если первое поле - код клиента). Задача состоит в том чтобы для каждого значения первого (ключевого) поля, вывести число уникальных значений второго (транзакционного) поля. (типа - сколько раз грузили клиенту, или сколько разных номенклатур покупал клиент).
В таком случае, задача решается так:
1. Создается view1 по основной таблице, во вьюшке оба поля, по обоим полям стоит группировка.
2. Создается view2. View2 построено по view1, сделана группировка по ключевому полю (field1), поставлена функция count(recid) (второе поле тут строго говоря вообще не при делах, сount нужно делать по любому int64 полю, recId -наиболее очевидный кандидат).

Во view2 в итоге будут находится записи в которых для каждого значения ключевого поля во втором поле будет находится число уникальных значений транзакционного поля в оригинальной таблице.
Старый 24.05.2022, 08:53   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Еще помучаю, если можно. Написал запрос.
В итоге, если:
1) взять COUNT(Field) order by Field DESC, то получается 2.
2) Если перебором, то получается 3
3) если в п.1 добавить фильтр по номенклатуре e которой реально 3, то получается 3.

С чем это может быть связано?

Для справки, если это может быть важно, Field - string
Сортировка по агрегированному полю, а также отсутствующему в группировке не срабатывает.
Возможно стоит попробовать выполнение запроса на чистом SQL, без создания дополнительных вьюшек.
В этом случае можно воспользоваться ORDER BY N, где N - это номер поля, участвующего в выборке.
Note! Класс с вашим запросом должен исполняться на сервере.
__________________
// no comments
Старый 24.05.2022, 08:54   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DesparioN Посмотреть сообщение
1) взять COUNT(Field) order by Field DESC, то получается 2.
Вы наверное ожидаете что order by будет применён к результату агрегирующей функции? В Аксапте оно так не работает. Только если, как вам уже советовали, явно зафиксировать результат агрегации в виде View, а потом уже внешним по отношению к View запросом отсортировать результат
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Statement, запрос (несколько) с транзакцией Pandasama DAX: Программирование 6 01.12.2022 01:35
Как класс->запрос->форма. Как такое создать? kitty DAX: Программирование 16 09.09.2014 12:52
DAX2012 - перепоставки по закупкам Starling DAX: Функционал 2 18.03.2014 13:56
Вложенный запрос SQL с помощью великого Query user_ax DAX: Программирование 9 07.10.2013 14:00
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.