检索客户收入
Retrieve customer revenue
我想创建一份包含前 20 位客户(基于收入)的报告。
我正在使用查询:
SELECT dbo.CustTable.AccountNum
,dbo.dirpartytable.NAME
,dbo.hcmworker.PERSONNELNUMBER
,dbo.CustInvoiceJour.SALESBALANCE
,dbo.custinvoicejour.QTY
FROM dbo.CustTable
inner JOIN dbo.HCMWORKER ON dbo.HCMWORKER.RECID = dbo.CustTable.KEV_Worker
inner join dbo.custInvoiceJour on CustInvoiceJour.OrderAccount = CustTable.AccountNum
inner join dbo.dirpartytable on dirpartytable.recid = custtable.PARTY
where CustTable.KEV_Worker = '5633561745'
ORDER BY SalesBalanceMst DESC
我找不到客户收入的关系,毕竟,这就是我想要对报表进行排序的方式。我在构建报告时正在对 SalesBalanceMST 进行排序。另外,我在执行此查询时得到了多条记录。
我做错了什么?
编辑:我现在意识到我正在显示每个发票日记帐,如何显示客户的总收入?
我不知道您的查询到底出了什么问题,但也许这些信息可以帮助您。
检查这个标准报告CustTopCustomersbyYTDSales
,它有一些很好的查询。
来自 AX 2012 的类似搜索:
CustInvoiceJour CustInvoiceJour;
CustTable CustTable;
DirPartyTable DirPartyTable;
select forceLiterals generateonly sum(SalesBalanceMST), sum(Qty) from CustInvoiceJour
where CustInvoiceJour.OrderAccount == '102372200'
&& CustInvoiceJour.InvoiceDate > today()-365
join TableId from CustTable
group AccountNum
where CustTable.AccountNum == CustInvoiceJour.OrderAccount
join TableId from DirPartyTable
group Name
where DirPartyTable.RecId == CustTable.Party;
info(CustInvoiceJour.getSQLStatement());
这显示了以下 SQL:
SELECT SUM(T1.SALESBALANCEMST),SUM(T1.QTY),T2.ACCOUNTNUM,T3.NAME
FROM CUSTINVOICEJOUR T1
CROSS JOIN CUSTTABLE T2
CROSS JOIN DIRPARTYTABLE T3
WHERE (((T1.PARTITION=5637144576) AND (T1.DATAAREAID=N'xxx'))
AND ((T1.ORDERACCOUNT=N'102372200')
AND (T1.INVOICEDATE>{ts '2015-11-06 00:00:00.000'})))
AND (((T2.PARTITION=5637144576) AND (T2.DATAAREAID=N'xxx'))
AND (T2.ACCOUNTNUM=T1.ORDERACCOUNT))
AND ((T3.PARTITION=5637144576)
AND (T3.RECID=T2.PARTY))
GROUP BY T2.ACCOUNTNUM,T3.NAME
ORDER BY T2.ACCOUNTNUM,T3.NAME
与您的查询有何不同:
- 没有加入 HcmWorker,因为我没有你的自定义字段。
- 使用 sum() 聚合
- 选择
InvoiceDate
- 选择
OrderAccount
DataAreaId
上的选择,对性能非常重要,隐含在 AX 中
Partition
上的选择,对性能非常重要,隐含在 AX 中
您不能直接对总和进行排序,但可以对 a nested SQL query.
我想创建一份包含前 20 位客户(基于收入)的报告。
我正在使用查询:
SELECT dbo.CustTable.AccountNum
,dbo.dirpartytable.NAME
,dbo.hcmworker.PERSONNELNUMBER
,dbo.CustInvoiceJour.SALESBALANCE
,dbo.custinvoicejour.QTY
FROM dbo.CustTable
inner JOIN dbo.HCMWORKER ON dbo.HCMWORKER.RECID = dbo.CustTable.KEV_Worker
inner join dbo.custInvoiceJour on CustInvoiceJour.OrderAccount = CustTable.AccountNum
inner join dbo.dirpartytable on dirpartytable.recid = custtable.PARTY
where CustTable.KEV_Worker = '5633561745'
ORDER BY SalesBalanceMst DESC
我找不到客户收入的关系,毕竟,这就是我想要对报表进行排序的方式。我在构建报告时正在对 SalesBalanceMST 进行排序。另外,我在执行此查询时得到了多条记录。
我做错了什么?
编辑:我现在意识到我正在显示每个发票日记帐,如何显示客户的总收入?
我不知道您的查询到底出了什么问题,但也许这些信息可以帮助您。
检查这个标准报告CustTopCustomersbyYTDSales
,它有一些很好的查询。
来自 AX 2012 的类似搜索:
CustInvoiceJour CustInvoiceJour;
CustTable CustTable;
DirPartyTable DirPartyTable;
select forceLiterals generateonly sum(SalesBalanceMST), sum(Qty) from CustInvoiceJour
where CustInvoiceJour.OrderAccount == '102372200'
&& CustInvoiceJour.InvoiceDate > today()-365
join TableId from CustTable
group AccountNum
where CustTable.AccountNum == CustInvoiceJour.OrderAccount
join TableId from DirPartyTable
group Name
where DirPartyTable.RecId == CustTable.Party;
info(CustInvoiceJour.getSQLStatement());
这显示了以下 SQL:
SELECT SUM(T1.SALESBALANCEMST),SUM(T1.QTY),T2.ACCOUNTNUM,T3.NAME
FROM CUSTINVOICEJOUR T1
CROSS JOIN CUSTTABLE T2
CROSS JOIN DIRPARTYTABLE T3
WHERE (((T1.PARTITION=5637144576) AND (T1.DATAAREAID=N'xxx'))
AND ((T1.ORDERACCOUNT=N'102372200')
AND (T1.INVOICEDATE>{ts '2015-11-06 00:00:00.000'})))
AND (((T2.PARTITION=5637144576) AND (T2.DATAAREAID=N'xxx'))
AND (T2.ACCOUNTNUM=T1.ORDERACCOUNT))
AND ((T3.PARTITION=5637144576)
AND (T3.RECID=T2.PARTY))
GROUP BY T2.ACCOUNTNUM,T3.NAME
ORDER BY T2.ACCOUNTNUM,T3.NAME
与您的查询有何不同:
- 没有加入 HcmWorker,因为我没有你的自定义字段。
- 使用 sum() 聚合
- 选择
InvoiceDate
- 选择
OrderAccount
DataAreaId
上的选择,对性能非常重要,隐含在 AX 中
Partition
上的选择,对性能非常重要,隐含在 AX 中
您不能直接对总和进行排序,但可以对 a nested SQL query.