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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.02.2005, 09:23   #1  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
Построение запроса в QueryBuild
Здравствуйте.
Не могу построить запрос в Report. Есть полученый this.query() из DataSource, связанного из двух таблиц CustInvoiceJourn и CustInvoicTrans с фильтром по параметрам из Dialog. Мне надо в конце отчета построить группировку по вспомогательной таблице InventPackagingMaterialCode , по полю PackMaterialCode с выводом суммы Trans.Qty по сообветствующей связи.
Схематично итоговый запрос выглядит так:
tr = this.query();
select sum(tr.Qty), mat.code
from tr, mat
where (tr.code = mat.trcod)
group by mat.code

q = this.queryRun().query();
qbd = q.dataSourceTable(tableNum(CustInvoiceTrans));
qbds = qbd.addDataSource(tableNum(InventPackagingUnit));
qbds.addLink(fieldnum(CustInvoiceTrans, ItemId), fieldnum(InventPackagingUnit, ItemRelation));
qbds.addSelectionField(fieldNum(CustInvoiceTrans, Qty), SelectionField::Sum);
qbds.addRange(fieldNum(InventPackagingUnit, ItemCode)).value(Enum2Str(TableGroupAll::Table));
qbds1 = qbds.addDataSource(tableNum(InventPackagingUnitMaterial));
qbds1.addLink(fieldnum(InventPackagingUnit, RecId), fieldnum(InventPackagingUnitMaterial, PackingUnitRecId));
qbds2 = qbds1.addDataSource(tableNum(InventPackagingMaterialCode));
qbds2.addSelectionField(fieldNum(InventPackagingMaterialCode,PackMaterialCode));
qbds2.addLink(fieldnum(InventPackagingUnitMaterial, PackMaterialCode), fieldnum(InventPackagingMaterialCode, PackMaterialCode));
qbds2.orderMode(OrderMode::GroupBy);
qbds2.addSortField(fieldNum(InventPackagingMaterialCode, PackMaterialCode));

нужной группировки по полю PackMaterialCode не получается. Что я пишу не правильно?
Старый 17.02.2005, 09:32   #2  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
вот неправильный итог
ИТОГО (кг) по пленка 100
ИТОГО (кг) по пузырек 323
ИТОГО (кг) по коробочка 20
ИТОГО (кг) по пленка 1 100.00
ИТОГО (кг) по пузырек 3 553.00
ИТОГО (кг) по коробочка 220

должно быть
ИТОГО (кг) по пленка 1 200.00
ИТОГО (кг) по пузырек 3 878.00
ИТОГО (кг) по коробочка 240
Старый 17.02.2005, 11:11   #3  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
PHP код:
qbd2.fetchmode(queryfetchmode::one2one
Старый 17.02.2005, 11:52   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
db, я смайлик отключил в коде вашего сообщения.
Старый 17.02.2005, 12:39   #5  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
Добавление этой строки ничего не изменило
Старый 17.02.2005, 12:47   #6  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
сорри, еще не хватает

qbd2.joinmode(joinmode:: innerjoin)
qbd.orderMode(OrderMode:: GroupBy)

тестировать запрос у меня никакго желания нет
если не заработает, попробуйте написать джобик и отладьте там этот запрос отдельно от отчета.
Старый 17.02.2005, 13:15   #7  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
X++:
q = this.queryRun().query();
    qbd  = q.dataSourceTable(tableNum(CustInvoiceTrans));
    qbds = qbd.addDataSource(tableNum(InventPackagingUnit));
    qbds.joinMode(JoinMode::InnerJoin);
    qbds.addLink(fieldnum(CustInvoiceTrans, ItemId), fieldnum(InventPackagingUnit, ItemRelation));
    qbds.addSelectionField(fieldNum(CustInvoiceTrans, Qty), SelectionField::Sum);
    qbds.addRange(fieldNum(InventPackagingUnit, ItemCode)).value(Enum2Str(TableGroupAll::Table));
    qbds1 = qbds.addDataSource(tableNum(InventPackagingUnitMaterial));
   qbds1.joinMode(JoinMode::InnerJoin);
    qbds1.addLink(fieldnum(InventPackagingUnit, RecId), fieldnum(InventPackagingUnitMaterial, PackingUnitRecId));
    qbds2 = qbds1.addDataSource(tableNum(InventPackagingMaterialCode));
    qbds2.addSelectionField(fieldNum(InventPackagingMaterialCode,PackMaterialCode));
    qbds2.addLink(fieldnum(InventPackagingUnitMaterial, PackMaterialCode), fieldnum(InventPackagingMaterialCode, PackMaterialCode));
    qbds2.joinMode(JoinMode::ExistsJoin);
    qbds2.fetchmode(queryfetchmode::one2one);
    qbds2.orderMode(OrderMode::GroupBy);
   qbds2.addSortField(fieldNum(InventPackagingMaterialCode, PackMaterialCode));
Вполне понимаю нежелание тестировать запрос. Я этим займусь. Кстати, GroupBy у меня в запросе уже есть. Но итог прежний, независимо от вида Join
Старый 17.02.2005, 13:29   #8  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Осмелюсь предположить, что проблема в
PHP код:
qbds2.joinMode(JoinMode::ExistsJoin); 
Попробуйте exists join заменить на inner join, как ранее советовал вам db.
__________________
Андрей.
Старый 17.02.2005, 13:31   #9  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
как я уже отмечала раньше, Но итог прежний, независимо от вида Join
Старый 17.02.2005, 13:33   #10  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
one2one на нужен и на qbds1 и на qbds2
Старый 17.02.2005, 13:35   #11  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Кстати, по-моему, добавление qbds2 вообще лишнее. У вас же группировка ведется по связующему полю из таблицы, относящейся к qbds1.
__________________
Андрей.
Старый 17.02.2005, 13:39   #12  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
добавила one2one 8 qbds & qbds2. Результат тот же… У меня есть мысль, ято GroupBy действует только в рамках последней таблицы, а не всего запроса. Такое возможно? И как быть в таком случае?
Старый 18.02.2005, 11:25   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,690 / 1192 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Re: Построение запроса в QueryBuild
Цитата:
Изначально опубликовано vesna
...
Есть полученый this.query() из DataSource, связанного из двух таблиц CustInvoiceJourn и CustInvoicTrans с фильтром по параметрам из Dialog.
А можно увидеть код этого самого запроса? В нем самом нет дополнительных группировок?
Старый 18.02.2005, 13:33   #14  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
Прикрепляю XPO с содержанием Отчета. Там запрос строится из связанных DS. Метод, где живет запрос - GroupOfPackagingMaterial()
Вложения
Тип файла: xpo foraxforum.xpo (154.9 Кб, 146 просмотров)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подготовка запроса(ламерские вопросы продолжаются) HorrR DAX: Программирование 4 08.07.2008 13:23
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Быстродействие запроса Antonuch DAX: Программирование 1 25.01.2008 15:58
Оптимизация запроса oleg_e DAX: Программирование 16 11.01.2008 10:22
Производительность запроса в отчете SHiSHok DAX: Программирование 14 13.11.2006 19:04

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

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

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