我正在尝试使用addselectionfield选择4个字段。来自这4个字段2的是汇总(求和)字段。
我正在执行以下操作:
date fromDate = systemDateGet();
date toDate = (systemDateGet() + 25);
query = new Query();
qbds = query.addDataSource(tableNum(MyTable));
qbds.addSelectionField(fieldNum(MyTable, DateField));
qbds.addSelectionField(fieldNum(MyTable, USDAmountField), SelectionField::Sum);
qbds.addSelectionField(fieldNum(MyTable, CurrencyNameField));
qbds.addSelectionField(fieldNum(MyTable, EURAmountField), SelectionField::Sum);
qbr = qbds.addRange(fieldNum(MyTable, DateField));
qbr.value(queryRange(fromDate, toDate));
queryRun = new QueryRun(query);
调试时,我在queryRun中得到以下select语句:
SELECT SUM(EURAmountField) FROM MyTable(MyTable_1)
WHERE ((DateField >= {ts '2014-04-01 00:00:00.000'}
AND DateField <= {ts'2014-04-26 00:00:00.000'}))
那么,为什么它只选择最后一个addSelectionField以及为什么要像我在addSelectionFields中编写的那样获取所有字段的原因是什么?
没有理由(我能想到)...这应该起作用,应该将selectionfield添加到您的querybuilddatasource中。尝试同步,编译和/或重新启动客户端。
您还需要做的是在您要选择的字段上按字段添加分组。否则,AX将不知道选择哪个值,因为多个记录可以具有不同的值。例如,要选择CurrencyNameField,请将其添加为选择字段,并使用:
qbds.addGroupByField(fieldNum(MyTable, CurrencyNameField));
然后,您将在CurrencyNameField字段中获取数据,但将获得每种货币名称的总和。
这似乎可行:
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
QueryRun queryrun;
date fromDate = systemDateGet();
date toDate = (systemDateGet() + 25);
query = new Query();
qbds = query.addDataSource(tableNum(MyTable));
qbds.addGroupByField(fieldNum(MyTable, DateField));
qbds.addGroupByField(fieldNum(MyTable, CurrencyNameField));
qbds.addSelectionField(fieldNum(MyTable, DateField));
qbds.addSelectionField(fieldNum(MyTable, CurrencyNameField));
qbds.addSelectionField(fieldNum(MyTable, EURAmountField), SelectionField::Sum);
qbds.addSelectionField(fieldNum(MyTable, USDAmountField), SelectionField::Sum);
qbr = qbds.addRange(fieldNum(MyTable, DateField));
qbr.value(queryRange(fromDate, toDate));
queryRun = new QueryRun(query);
查询运行包含以下内容:
SELECT DateField, CurrencyNameField, SUM(EURAmountField), SUM(USDAmountField)
FROM MyTable(MyTable_1) GROUP BY MyTable.DateField, MyTable.CurrencyNameField
WHERE ((DateField>={ts '2014-04-01 00:00:00.000'}
AND DateField<={ts '2014-04-26 00:00:00.000'}))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句