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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.07.2017, 15:10   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
649 / 125 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Having в Query - возможно ли и как, если возможно
Собственно, сабж:

- есть Query, построенный из кода, посредством QueryBuild* классов
- очень хочется добавить условие а-ля Having Sum(zzz) > 123, но прямых путей для этого я не знаю.

Если кто такой путь знает - прямой, либо даже кривой - очень обяжете советом
__________________
Best Regards,
Roman
Старый 10.07.2017, 15:13   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,256 / 247 (11) ++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Аксапта-то какая? В 2012 вроде можно строить квери по calculated fields (могу ошибаться, уже два года с ней не работал, но вроде так)
__________________
С уважением,
Вячеслав
Старый 10.07.2017, 15:27   #3  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
216 / 201 (7) ++++++
Регистрация: 27.02.2006
Адрес: Дания
Если Аксапта 2012я, то вместо программирования можно создать новый View с полем SumOfZzz (у поля свойство Aggregation = Sum), и в QueryBuild* использовать этот View.
Старый 10.07.2017, 15:33   #4  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
649 / 125 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от pitersky Посмотреть сообщение
Аксапта-то какая? В 2012 вроде можно строить квери по calculated fields (могу ошибаться, уже два года с ней не работал, но вроде так)
Виноват.

Ax 2009.
__________________
Best Regards,
Roman
Старый 10.07.2017, 15:35   #5  
fed is offline
fed
Moderator
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Ex AND Project
Соотечественники
 
2,089 / 3868 (133) ++++++++++
Регистрация: 13.03.2002
Адрес: İstanbul
Цитата:
Сообщение от Stitch_MS Посмотреть сообщение
Если Аксапта 2012я, то вместо программирования можно создать новый View с полем SumOfZzz (у поля свойство Aggregation = Sum), и в QueryBuild* использовать этот View.
Ну этот подход и в версии 2009 замечательно работал, так что топик-стартеру вполне может подойти.
Старый 10.07.2017, 17:52   #6  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,695 / 3296 (151) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
- очень хочется добавить условие а-ля Having Sum(zzz) > 123, но прямых путей для этого я не знаю.

Если кто такой путь знает - прямой, либо даже кривой - очень обяжете советом
только через прямой запрос и ResultSet. со всеми вытекающими последствиями. это как правка реестра.

я даже классик для собственного удобства делал. https://github.com/mazzy-ax/SysResultSet
см. пример использования https://github.com/mazzy-ax/SysResul...sultSet_AX.xpo
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 10.07.2017 в 17:59.
Старый 10.07.2017, 17:58   #7  
Pokersky09 is offline
Pokersky09
Участник
 
19 / 45 (2) +++
Регистрация: 15.11.2012
Адрес: Казань
Без создания View можно.
Программно задавать ограничения можно на уровне Query.

Пример с SUM отладить не удалось (за пару минут), но Count точно работает.

X++:
static void HavingJob(Args _args)
{
    Query                   query;
    QueryBuildDataSource    datasource;
    QueryHavingFilter       havingFilter;
    
    QueryRun                queryRun;
    LedgerJournalTable      LedgerJournalTable;

    query = new Query();
    
    datasource = query.addDataSource(tableNum(LedgerJournalTable));
    
    datasource.addSelectionField(fieldNum(LedgerJournalTable,   RecId), SelectionField::Count);
    datasource.addGroupByField(fieldNum(LedgerJournalTable,     JournalType));
    
    havingFilter = query.addHavingFilter(datasource, fieldStr(LedgerJournalTable, JournalType), AggregateFunction::Count);
    havingFilter.value('=1');

    queryRun = new QueryRun(query);
    while (queryRun.next())
    {
        LedgerJournalTable = queryRun.getNo(1);
        
        info(strFmt('Group %1: %2', LedgerJournalTable.JournalType, LedgerJournalTable.RecId));
    }
}
Старый 11.07.2017, 11:00   #8  
dech is offline
dech
Участник
Аватар для dech
 
417 / 173 (6) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Цитата:
Сообщение от Pokersky09 Посмотреть сообщение
Без создания View можно.
Программно задавать ограничения можно на уровне Query.
Это можно сделать только в 2012. А топикстартеру нужно реализовать это в 2009.
__________________
// no comments
Старый 12.07.2017, 08:28   #9  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
36 / 22 (1) +++
Регистрация: 19.09.2013
Адрес: Украина, Одесса
Делайте выборку с условием из View2 имеющего в datasource ранее созданный View1 c GroupBy.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
AIF: OData Query Service Blog bot DAX Blogs 0 24.08.2011 09:11
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
Query по временной таблице. Возможно ли это? metal DAX: Программирование 2 20.11.2002 14:40
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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