计算 SSRS 中组列内的增长百分比
Calculate growth percentage inside a group column in SSRS
我目前正在构建一个报告,其中包含一个 table 列组和月值组,因此它会根据我的用户选择的范围动态地创建月份列。
table design
我们需要的是,在每个 Valuación 列中,我们显示一个 Crecimiento(增长)列。为此,需要将上个月的[SUM(Diferencia)]视为100%,以应用三者的规则
目前,这是我放在字段上的公式
=IIF(
Fields!Mes.Value = 1,
0,
(Sum(Fields!Diferencia.Value)/
ReportItems!Diferencia.Value)
)
(Mes = 月)
但是,如您所知,它总是 returns 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
您可以使用 PREVIOUS
函数从之前的范围内获取数据(在您的例子中是上个月)。
我不确定您想要显示什么,但这个简单的表达式将显示当前月份的值与上个月的值的百分比。例如,如果一月是 50,二月是 60,那么它将 return 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 使用来自同一范围的前一组数据。范围仍然是您的月份组 Mes1,但我们只是从上一个组条目(在本例中为上个月)获取数据。希望这是有道理的!
样本报告
我基于NorthWind示例数据库构建了一份测试报告。
数据集仅包含按月份和国家/地区分类的总订单价值。
我添加了一个矩阵并将行组设置为Country
,列组设置为OrderMonth
,数据值设置为OrderValue
。
我添加了一些额外的列来显示以前的和计算的增长值。
设计看起来像这样。
组内每一列的表达式是
当前:
=Sum(Fields!OrderValue.Value)
上一个:
=PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth")
Current/Previous =
=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") )
最终输出如下所示,希望是您所需要的。
我目前正在构建一个报告,其中包含一个 table 列组和月值组,因此它会根据我的用户选择的范围动态地创建月份列。
table design
我们需要的是,在每个 Valuación 列中,我们显示一个 Crecimiento(增长)列。为此,需要将上个月的[SUM(Diferencia)]视为100%,以应用三者的规则
目前,这是我放在字段上的公式
=IIF(
Fields!Mes.Value = 1,
0,
(Sum(Fields!Diferencia.Value)/
ReportItems!Diferencia.Value)
)
(Mes = 月)
但是,如您所知,它总是 returns 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
您可以使用 PREVIOUS
函数从之前的范围内获取数据(在您的例子中是上个月)。
我不确定您想要显示什么,但这个简单的表达式将显示当前月份的值与上个月的值的百分比。例如,如果一月是 50,二月是 60,那么它将 return 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 使用来自同一范围的前一组数据。范围仍然是您的月份组 Mes1,但我们只是从上一个组条目(在本例中为上个月)获取数据。希望这是有道理的!
样本报告 我基于NorthWind示例数据库构建了一份测试报告。
数据集仅包含按月份和国家/地区分类的总订单价值。
我添加了一个矩阵并将行组设置为Country
,列组设置为OrderMonth
,数据值设置为OrderValue
。
我添加了一些额外的列来显示以前的和计算的增长值。
设计看起来像这样。
组内每一列的表达式是
当前:
=Sum(Fields!OrderValue.Value)
上一个:
=PREVIOUS(Sum(Fields!OrderValue.Value), "OrderMonth")
Current/Previous =
=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") )
最终输出如下所示,希望是您所需要的。