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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2009, 12:26   #1  
dynamax is offline
dynamax
Участник
 
62 / 11 (1) +
Регистрация: 28.09.2009
Статистика по каждому коду номенклатуры. Как правильно построить Query?
Добрый день, необходим совет.

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

Нажмите на изображение для увеличения
Название: DeartConsum.jpg
Просмотров: 290
Размер:	38.0 Кб
ID:	5180

У формы три DataSources: InventTrans, InventTransPosting, InventDim.

Я сделал на Datasource InventTrans методу SetupRange (посмотрел в smmActivities), вот код:

X++:
public void setupRanges()
{
    ;
    dsForInventTrans                    = InventTrans_ds.query().dataSourceTable(tablenum(InventTrans));


    if(!dsForInventDim)
    dsForInventDim                      = dsForInventTrans.addDataSource(tablenum(InventDim));
    else inventTrans_DS.query().dataSourceTable(tablenum(InventDim));
    dsForInventDim.relations(true);
    dsForInventDim.joinMode(JoinMode::ExistsJoin);

    if(!dsForInventTransPostingPhysical)
    dsForInventTransPostingPhysical     = dsForInventTrans.addDataSource(tablenum(inventTransPosting));
    else inventTrans_ds.query().dataSourceTable(tablenum(inventTransPosting));
    dsForInventTransPostingPhysical.relations(true);
    dsForInventTransPostingPhysical.joinMode(JoinMode::ExistsJoin);

    rangeForItemId          = SysQuery::findOrCreateRange(dsForInventTrans, fieldnum(InventTrans, itemId));
    rangePeriod            = SysQuery::findOrCreateRange(dsForInventTransPostingPhysical, fieldnum(InventTransPosting, TransDate));
}
executeQuery на етом же DataSource :

X++:
public void executeQuery()
{

    InventSum       inventSum;
    InventTable     inventTable;
    ;

    inventTrans_DS.setupRanges();

    // Enable/Disable ranges
    if (ItemId && department.value() == true)
    {
        rangeForItemId.enabled(true);
        rangePeriod.enabled(true);
        rangeForItemId.value(itemIdFilter);
        rangePeriod.value(SysQuery::range(StartDate, EndDate));

        dsForInventTrans.addSortField(fieldnum(inventTrans, itemId));
        dsForInventTrans.addSortField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
        dsForInventTrans.orderMode(OrderMode::GroupBy);
    }
    super();    
}
и вот SQL-запрос, который формируется:

X++:
SELECT * FROM InventTrans GROUP BY InventTrans.ItemId ASC, InventTrans.InvoiceId ASC WHERE ((ItemId = N'M0001')) EXISTS JOIN * FROM InventDim WHERE InventTrans.inventDimId = InventDim.inventDimId EXISTS JOIN * FROM InventTransPosting WHERE InventTrans.InventTransId = InventTransPosting.InventTransId AND ((TransDate>={ts '2008-09-01 00:00:00.000'} AND TransDate<={ts '2009-09-28 00:00:00.000'}))
по каким-то причинам не происходит группировка по InventTransPosting.Dimension[1]. Если у кого-нибудь есть идеи, буду благодарен.


P.S. Группировка по Центру и Цели происходит таким-же образом? и как мне лучще всего выяснить Кол-во и Цену?
Теги
query, запрос (query), финансовая аналитика

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Сводное планирование и статистика номенклатуры slava09 DAX: Функционал 6 22.01.2007 10:39
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Как построить Query? Bukovka DAX: Программирование 9 26.03.2004 16:35
Как правильно построить Query Bukovka DAX: Программирование 0 25.03.2004 11:55

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

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

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