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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2011, 16:01   #1  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
суммирование в отчете
Добрый день,
помогите разобратсья
в отчете суммирую 3 поля

qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum);
qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum);
можно ли так?
qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum);

для третьего пишу метод
display int getcruisepassengers()
{
if (FlxPortJournal_1.ShipsType == "Kruiisilaev")

return FlxPortJournal_1.FlxNumPassengersTotalArrival;

return 0;
}


для третьего поля сумму не считает?
Старый 28.03.2011, 16:04   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от romanja Посмотреть сообщение
можно ли так?
Нет. Только через временную таблицу. Или в вашем случае можно реализовать через вложенный подзапрос. Тогда даже быстрее получиться
Старый 28.03.2011, 17:05   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от romanja Посмотреть сообщение
можно ли так?
qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum);

для третьего пишу метод
display int getcruisepassengers()
{
if (FlxPortJournal_1.ShipsType == "Kruiisilaev")

return FlxPortJournal_1.FlxNumPassengersTotalArrival;

return 0;
}

для третьего поля сумму не считает?
Можно, с поправкой:
X++:
if (FlxPortJournal_1.ShipsType == "Kruiisilaev")
qbds.addSelectionField(element.getcruisepassengers(),SelectionField::Sum);

display int getcruisepassengers()
{
      return fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival);
}
Старый 28.03.2011, 17:33   #4  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
чего то не того
ставит сумму и круизным и не круизным одну и ту же
Старый 28.03.2011, 22:37   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от raz Посмотреть сообщение
Можно, с поправкой
Не вводите людей в заблуждение. В аксапте нельзя применять агрегатные функции к вычисляемым полям (читай дисплей-методам). Т.е в чистом виде вычисляемых полей (в терминах SQL) в аксапте нет, а есть более сложный механизм дисплей-методов, работающих в контексте отдельных курсоров, а не таблицы в целом.

Если уж кровь из носа эту задачу нужно решить за один запрос, то я бы попытался приджойнить таблицу саму к себе, так чтобы напротив круизных записей суммы были, а напротив остальных нет. И соответственно третью сумму искать уже по этому дополнительному приджойненному столбцу. Но имхо всё это шаманство. Куда проще найти требуемую сумму дополнительным подзапросом.
Старый 29.03.2011, 10:08   #6  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от romanja Посмотреть сообщение
для третьего поля сумму не считает?
У вас поле ShipsType попадает в выборку (добавлено в qbds)?
Для того, что бы условие в дисплей методе отрабатывало корректно, в qbds надо, например, добавить группировку по полю ShipsType.
__________________
Dynamics AX Experience
Старый 30.03.2011, 10:32   #7  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
добавил
qbds.addRange(fieldNum(FlxPortJournal,ShipsType)).value();
qbds.orderMode(OrderMode::GroupBy);
не помогает
похоже нужно работать с вложенным подзапросом
X++:
qr = new QueryRun(queryRun.query());
while (qr.next())
        {
            portJournal = qr.get(tableNum(FlxPortJournal));
            if  (FlxPortJournal_1.ShipsType == "Kruiisilaev")
             select sum(FlxNumPassengersTotalArrival)
             from  flxPortJournal_1
             group by  flxPortJournal_1.ShipsName;

 }
Старый 30.03.2011, 11:08   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Во первых, не addRange, а addSortField.
А во вторых...
На сколько я понял, в вашей задаче первые две суммы должны считаться по всем строкам входящим в группу, а третья только по круизным. Это так? Вы всё-таки определитесь в каких разрезах вам нужны ваши три суммы (внутри каких групп должно происходить суммирование)? Может ли внутри такой группы находиться одновременно и круизные строки и не круизные?
Старый 30.03.2011, 11:32   #9  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
да тогда, qbds.addSortField(FieldNum(FlxPortJournal,ShipsType));
первые две суммы должны считаться по всем строкам , а третья только по круизным
первые две
qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum);
qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum);
а третье те же
(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum);
только с условием
(FlxPortJournal_1.ShipsType == "Kruiisilaev")
Старый 30.03.2011, 11:45   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ответьте ещё на этот вопрос.
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Внутри каких групп должно происходить суммирование? Может ли внутри такой группы находиться одновременно и круизные строки и не круизные?
Или ещё лучше приведите здесь желаемый запрос на чистом SQL. Что бы у участников обсуждения не осталось никаких разночтений
Старый 30.03.2011, 12:07   #11  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
примерно так, не проверял
select sum(FlxPortPcsArrival),sum(FlxNumPassengersTotalArrival),t.cruisepassangers
from flxPortJournal_1,(
select sum(FlxNumPassengersTotalArrival) cruisepassangers
from flxPortJournal_1
group by ShipsName)t
group by ShipsName
Старый 30.03.2011, 12:14   #12  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от romanja Посмотреть сообщение
да тогда, qbds.addSortField(FieldNum(FlxPortJournal,ShipsType));
первые две суммы должны считаться по всем строкам , а третья только по круизным
первые две
qbds.addSelectionField(fieldNum(FlxPortJournal,FlxPortPcsArrival),SelectionField::Sum);
qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum);
а третье те же
(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum);
только с условием
(FlxPortJournal_1.ShipsType == "Kruiisilaev")
Все правильно.
Все три поля суммируются + группировка по ShipsType. Первые два поля выводятся в отчет обычным способом, а третье поле - дисплей методом из первого сообщения.
__________________
Dynamics AX Experience
Старый 30.03.2011, 12:26   #13  
romanja is offline
romanja
Участник
 
30 / 10 (1) +
Регистрация: 06.01.2011
все заработала благодарю
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сортировка в Query в отчете Zlojbarsuk DAX: Программирование 7 27.03.2010 00:18
Динамические контролы в отчете основанные на display-методе petr DAX: Программирование 19 18.09.2006 15:29
dialog в отчёте gaenar DAX: Программирование 6 14.04.2005 11:15
Не срабатывает один из footer-ов в отчете AKIS-Falcon DAX: Программирование 11 06.07.2004 09:52
Установка Range в отчёте Paul_ST DAX: Программирование 13 06.01.2004 17:33

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

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

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