计算SSRS中组列内的增长百分比

时间:2018-10-30 21:15:37

标签: reporting-services reporting ssrs-2008-r2

我当前正在构建一个报表,其中包括一个表,该表包含具有列组的表以及列的“月”值,因此它将根据用户选择的范围来动态创建月列。

table design

所需要的是,在每个Valuación列中,我们都显示一个 Crecimiento (增长)列。为此,对于要应用的三个规则,上个月的 [SUM(Diferencia)] 必须被视为100%

当前,这是我在字段上放置的公式

=IIF(
Fields!Mes.Value = 1, 
0,
(Sum(Fields!Diferencia.Value)/
ReportItems!Diferencia.Value)
)

(月=月)

但是,您可能知道,它总是返回100%,因为Sum(Fields!Diferencia.Value)= ReportItems!Diferencia.Value)(可能会猜到)

我尝试使用 Fields!Diferencia.Value Sum(Fields!Diferencia.Value,“ Informacion”)(第二个是我搜索后得到的数据集类别中的 Diferencia

Datasets category

但仍然不知道如何引用上个月的Sum(Fields!Diferencia.Value)

知道这怎么可能吗?

先谢谢大家

编辑1:我要添加实时预览图像,以向您展示实际运行期间数据的显示方式

Edit 1 image

1 个答案:

答案 0 :(得分:0)

您可以使用PREVIOUS函数从先前的范围范围(在您的情况下为上个月)获取数据。

我不确定您要显示的内容是什么,但是这个简单的表达式会将当前月份的值显示为前一个月份值的百分比。例如,如果一月为50,二月为60,则返回1.2(如果使用“ p2”格式字符串进行格式化,则返回120%)

更新了答案的这一部分:使用类似的内容

= (Sum(Fields!Diferencia.Value)) / Previous(Sum(Fields!Diferencia.Value), "Mes1")

注意:组名“ Mes1”区分大小写

它如何知道要累加的值?要清楚地解释它很棘手,但简短的解释是您的表达式位于列组“ Mes1”内,因此SUM(Fields!Diferencia.Value)表示当前范围内的sum Fields!Diferencia.Value,当前范围是月份组。当我们使用PREVIOUS函数时,会发生完全相同的事情,除了这次是告诉SSRS使用同一作用域中的Previous数据集。范围仍然是您的月份组Mes1,但我们只是从上一个组条目(在这种情况下为上个月)获取数据。希望有道理!

样本报告 我基于NorthWind示例数据库构建了一个测试报告。

数据集仅包含按月份和国家/地区划分的总订单值。

我添加了一个矩阵,并将行组设置为Country,将列组设置为OrderMonth,并将数据值设置为OrderValue

我添加了一些额外的列以显示以前的和计算得出的增长值。

设计看起来像这样。

enter image description here

该组中每一列的表达式为

当前:

  =Sum(Fields!OrderValue.Value)

上一个:

=PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth")

当前/上一个=

=IIF(PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth") = 0 , 0, Sum(Fields!OrderValue.Value))
/
IIF(PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth") = 0 , 1, PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth") )

最终输出如下所示,希望这是您所需要的。

enter image description here