我正在尝试创建一个SSRS报告,它有一个数据矩阵,可以按月、季度或每年分组。我能够正确分组我的数据每月,但我遇到了问题时,试图按任何其他的分组。
下面是一个示例数据集:
Account # BillingDate DateActivated Balance
1 1/1/16 1/1/16 $10,000
1 2/1/16 1/1/16 $9,000
1 3/1/16 1/1/16 $9,500
1 4/1/16 1/1/16 $7,000
1 5/1/16 1/1/16 $4,000
1 6/1/16 1/1/16 $1,000当我按季度分组时,我只想要该季度的最后一个月的数据,例如,对于Q1,我想要9500美元的余额,而忽略了10,000美元和9,000美元的余额。然而,我的分组正在总结他们,并给我28,500美元。
期望的结果
月报:
DateActivated 1/1/16
BillingDate 1/1/6 $10,000
BillingDate 2/1/6 $9,000
BillingDate 3/1/6 $9,500
BillingDate 4/1/6 $7,000
BillingDate 5/1/6 $4,000
BillingDate 6/1/6 $1,500季度报告:
DateActivated Q1
BillingDate Q1 $9,500
BillingDate Q2 $1,000我一直试图使用子查询,但还没有开始工作。
编辑:我使用一个简单的查询来获得上面的结果:
SELECT AccountNumber, BillingDate, DateActivated, Balance
FROM TestTable发布于 2016-12-02 21:05:08
这不是一个简单的公式吗?
=sum(switch(month(Fields!BillingDate.value) = 3 ,Balance ,
month(Fields!BillingDate.value) = 6 ,Balance ,
month(Fields!BillingDate.value) = 9 ,Balance ,
month(Fields!BillingDate.value) = 12 ,Balance,
month(Fields!BillingDate.value) = month(@ParameterThruDate),Balance))矩阵群
DatePart(DateInterval.Quarter,Fields.BillingDate.value)发布于 2016-12-02 21:36:57
创建两个矩阵如下所示:
月报:

季度报告:

可以使用此表达式计算四分之一行组:
=DatePart(DateInterval.Quarter,Fields!BillingDate.Value)为了得到四分之一的使用:
="BillingDate Q" & DatePart(DateInterval.Quarter,Fields!BillingDate.Value)要获得最后一个余额值,请使用:
=SUM(
IIF(Fields!BillingDate.Value=MAX(Fields!BillingDate.Value),Fields!Balance.Value,0
))还请考虑按帐户创建父行组。
其结果是:

我为Q4创建了一个包含不完整数据的虚拟数据集(11月和12月没有数据)。它显示了如果11月或12月不存在的八元数据。
如果这有帮助的话请告诉我。
发布于 2016-12-02 23:24:39
在我看来,总是最好让sql完成繁重的工作,并保持SSRS相当简单。我将更新您的查询,使其仅根据@period_type参数返回所需的记录。此示例假设您的数据已经按月分组,如示例数据所示。如果不是这样的话,请告诉我,我可以更新这个示例:
if @period_type = 1 -- monthly
select
AccountNumber,
-- convert BillingDate to text so the data type matches the Quarter strings
convert(varchar(10),BillingDate,101) as BillingDate
DateActivated,
Balance
from TestTable
if @period_type = 2 -- quarterly
select
AccountNumber,
BillingDate
DateActivated,
Balance
from (
select
AccountNumber,
'Q' + cast(datepart(quarter,BillingDate) as char(1)) as BillingDate
DateActivated,
Balance,
row_number() over(partition by datepart(quarter,BillingDate)
order by BillingDate desc) keep_this_1
from TestTable
) tt
where keep_this_1 = 1https://stackoverflow.com/questions/40940587
复制相似问题