我正在研究SSRS 2008.在行和列的交叉处,一个包含一个行组(产品)和一个列组(月)的简单Tablix是数据(销售数量)。现在我添加一个总行,等于每个月的总和(销售数量)。我还添加了一个总列,它等于每个产品的总和(销售数量)。在总行/列的交叉点处,该值是所有产品和所有月份的销售总数的总和。现在我想将此更改为所有产品的总数,但除了上个月之外的所有月份。例如。有产品1,2,3和第1,2,3个月。我希望产品1,2,3和1,2的销售总额。怎么做?像这张照片,在右下角,应该是6(2月和1月)。
----------更新,添加脚本来创建此报告,所以也许有人可以尝试。
数据集:
select 'Jan' as mon, 'p1' as prod, 1 as id
union all
select 'Feb' as mon, 'p1' as prod, 1
union all
select 'Mar' as mon, 'p1' as prod, 1
union all
select 'Jan' as mon, 'p2' as prod, 1
union all
select 'Feb' as mon, 'p2' as prod, 1
union all
select 'Mar' as mon, 'p2' as prod, 1
union all
select 'Jan' as mon, 'p3' as prod, 1
union all
select 'Feb' as mon, 'p3' as prod, 1
union all
select 'Mar' as mon, 'p3' as prod, 1
报告定义:
有一个行组(prod上的组),一个列组(mon上的组)。 实际上,我可以通过在没有上个月的情况下计算总数来在T-SQL中执行此操作,然后将其连接回主数据集。但只是想知道SSRS是否可以实现。
答案 0 :(得分:0)
在表达式中使用IIF从数据集中排除最后一个(MAX)月份的IIF。
=SUM(IIF(Month(Fields!DateField.Value) & "|" & YEAR(Fields!DateField.Value) =
Month(MAX(Fields!DateField.Value, "Yourdataset")) & "|" & YEAR(MAX(Fields!DateField.Value, "Yourdataset")), 0, Fields!ValueField.Value))
如果月份等于最大月份,则为0,否则将使用 ValueField 。
答案 1 :(得分:0)
引用您想要按名称求和的文本框,作为reportItems集合的成员。
在您的示例中,例如,如果Tablix的底行(总计行)具有名为“tbTotal1”,“tbTotal2”,“tbTotal3”的月份列的文本框,那么您将在此设置如下表达式最后一个总结前两个月总计的文本框:
=ReportItems!tbTotal1.Value + ReportItems!tbTotal2.Value
答案 2 :(得分:0)
尝试一下:
RunningValue(Fields!totalField.Value,Sum,"DataSourceName")
您可以修改 aggregator (通过使用例如Count而不是Sum),并且,如果要在每次迭代中重置值,则可以通过单词 Nothing更改DataSourceName。