SSRS获得之前的总数

时间:2015-06-16 10:54:11

标签: reporting-services

我正在研究SSRS 2008.在行和列的交叉处,一个包含一个行组(产品)和一个列组(月)的简单Tablix是数据(销售数量)。现在我添加一个总行,等于每个月的总和(销售数量)。我还添加了一个总列,它等于每个产品的总和(销售数量)。在总行/列的交叉点处,该值是所有产品和所有月份的销售总数的总和。现在我想将此更改为所有产品的总数,但除了上个月之外的所有月份。例如。有产品1,2,3和第1,2,3个月。我希望产品1,2,3和1,2的销售总额。怎么做?像这张照片,在右下角,应该是6(2月和1月)。

enter image description here

----------更新,添加脚本来创建此报告,所以也许有人可以尝试。

数据集:

    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

报告定义:

enter image description here

有一个行组(prod上的组),一个列组(mon上的组)。 实际上,我可以通过在没有上个月的情况下计算总数来在T-SQL中执行此操作,然后将其连接回主数据集。但只是想知道SSRS是否可以实现。

3 个答案:

答案 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。