Reporting services 如何从ssrs中的12行中获取以前的值
我在SSRS中有一份报告,显示每个月的收入:Reporting services 如何从ssrs中的12行中获取以前的值,reporting-services,Reporting Services,我在SSRS中有一份报告,显示每个月的收入: | MO-YR | Revenue| |01-2019 | $10.000| |02-2019 | $13.000| |03-2019 | $9.500 | |... |... | |... |... | |... |... | |10-2020 | $21.000| |11-2020 | $850 | 我必须做3个月平均值
| MO-YR | Revenue|
|01-2019 | $10.000|
|02-2019 | $13.000|
|03-2019 | $9.500 |
|... |... |
|... |... |
|... |... |
|10-2020 | $21.000|
|11-2020 | $850 |
我必须做3个月平均值和12个月平均值,例如:
2020年4月的3个月平均值为[2020年1月收入+2020年2月收入+2020年3月收入]/3。
12个月的平均值是一样的,但是12个月加起来,然后除以12。我的问题是:我怎样才能获得前3行的值,以及如何从SSRS中的前12行中获得值
我还添加了数据集源存储过程的代码:
SELECT
*
FROM
(SELECT
pr.company_name AS [CompanyName],
pr.sr_service_recid AS [Ticket],
pr.unit_price AS [Invoice Amount],
FORMAT(ih.Date_Invoice, 'MM-yyyy') AS [MO YR],
FORMAT(EOMONTH(ih.Date_Invoice),'dd') AS [MO Days],
ih.Date_Invoice AS [WorkDate]
FROM
Product pr
LEFT JOIN InvoiceHeader ih
ON
ih.Billing_Log_RecID = pr.Billing_Log_RecID
AND
ih.Company_RecID = pr.company_recid
LEFT JOIN SRService sr
ON
pr.sr_service_recid = sr.SR_Service_RecID
LEFT JOIN vService vs
ON
vs.SR_Service_RecID = pr.sr_service_recid
UNION ALL
SELECT
vt.company_name AS [CompanyName],
vt.SR_Service_RecID AS [Ticket],
vt.Billable_Hrs * CASE
WHEN
vt.Hourly_Rate < 25
THEN
0.00
ELSE
vt.Hourly_Rate
END [Invoice Amount],
FORMAT(vt.Date_Start, 'MM-yyyy') AS [MO YR],
FORMAT(EOMONTH(vt.Date_Start), 'dd') AS [MO Days],
vt.Date_Start AS [WorkDate]
FROM
vTime vt
LEFT JOIN SRService sr
ON
sr.SR_Service_RecID = vt.SR_Service_RecID
LEFT JOIN vService vs
ON
vs.SR_Service_RecID = vt.SR_Service_RecID
LEFT JOIN Product pr
ON
pr.sr_service_recid = vt.SR_Service_RecID
LEFT JOIN InvoiceHeader ih
ON
vt.Invoice_Number = ih.Invoice_Number
)union_all
ORDER BY [WorkDate]
如果您可以在数据集查询中这样做,那么我建议这是最好的选择 为了保持这个答案的简单性,我不会发布存储过程更改的完整代码,但这应该很容易做到 步骤1:向存储过程中添加一个新列,您可以使用该列对数据进行正确排序
FORMAT(vt.Date_Start, 'yyyyMM') AS [YrMoSort]
步骤2:将存储过程的结果转储到临时表中,我们可以在其中计算出所需的附加值
DECLARE @t TABLE ([MO-YR] varchar(7), [YrMoSort] varchar(6), Revenue float)
INSERT INTO @t
EXEC yourStoredProcNameHere
SELECT
*,
MT3 = SUM(Revenue) OVER(ORDER BY YrMoSort ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),
MT12 = SUM(Revenue) OVER(ORDER BY YrMoSort ROWS BETWEEN 11 PRECEDING AND CURRENT ROW),
FROM @t
注意:这假设您的数据中没有空白。如果有,则在执行部分求和之前,您需要填补这些空白,因为它只查找前几行,不知道YrMoSort包含日期信息。您的数据来自哪里?这通常是您在数据集定义中要做的事情。我的数据来自SQL存储过程。您可以更改存储过程或数据集的源吗?是的,我可以用它做任何我想做的事情,但我希望它可以在SRSS中完成。在SSRS中要做到这一点而不降低性能是非常困难的。你能在你的问题中添加你的程序代码吗?