比较2个动态创建的矩阵列以获得差异

时间:2016-01-13 18:37:42

标签: reporting-services ssrs-2012 reportbuilder3.0

我有一个矩阵设置,其中一个名为“company”的Row Group,一个名为“Year”的列组和一个值字段,该值字段是收入年份的费用总和。列组最终将有2列通过用户输入提供。最终结果是一个看起来像这样的矩阵:

openFile()

我想要做的是在矩阵中添加一列来计算从第1年到第2年的变化。有没有办法在矩阵中执行此操作,例如添加一个新列,其中的表达式比较2行中的条目或我是否需要操作SQL代码来创建在代码中执行此操作的列?为此,这里是数据集代码的视图,如果这是我需要的方式:

         Year 1 | Year 2
Company:    $500    $250
Company2:   $750    $250

2 个答案:

答案 0 :(得分:1)

尝试在标题类型Change中添加一个年级组之外的列,或者在下面的单元格中使用此表达式添加您要放置的内容:

=Sum(iif(Max(Fields!DeliveryYear.Value)=Fields!DeliveryYear.Value,Fields!Revenue.Value,0))-
Sum(iif(Min(Fields!DeliveryYear.Value)=Fields!DeliveryYear.Value,Fields!Revenue.Value,0))
  

注意我将 min 年(1)收入总和减去 max   年(2)收入总和。

在你的例子中,它将产生:

+-----------+--------+--------+--------+
| Company   | Year 1 | Year 2 | Change |
+-----------+--------+--------+--------+
| Company A | 500    | 250    | -250   |
+-----------+--------+--------+--------+

您可以通过多种方式定义更改,可能是百分比或任何其他度量,这只是一个示例,了解上述表达式正在做什么,以便计算您需要的度量。

编辑1:

使用此数据排列添加矩阵。

enter image description here

矩阵在预览中看起来像这样:

enter image description here

请确保在DeliveryYear组外添加了Change列,如上图所示。还要检查表达式中与您的字段名称相对应的字段名称。

编辑2:

如果Revenue具有空值,您可以尝试:

尝试使用T-SQL ISNULL()函数替换查询级别的空值,在此部分更改您的查询,如下所示

,ISNULL(ChargeDetails.Revenue,0)

但是,如果DeliveryYear具有空值,您可能希望忽略该记录,因此请尝试在where子句中将其排除。

如果您需要进一步的帮助,请告诉我。

答案 1 :(得分:0)

我最终使用以下内容作为更改列中的表达式。

=sum(iif(Fields!Delivery_Year.Value=Parameters!DeliveryYear.Value,1,0)*Fields!Revenue.Value) -  sum(iif(Fields!Delivery_Year.Value=Parameters!ComparisonYear2.Value,1,0)* Fields!Revenue.Value)