【问题标题】:Calculate growth percentage inside a group column in SSRS计算SSRS中组列内的增长百分比
【发布时间】:2018-10-30 21:15:36
【问题描述】:

我目前正在构建一个报告,而不是包含一个包含列组的表,其中包含月份值组,因此它将根据我的用户选择的范围动态地创建月份列。

table design

需要的是,沿着每个 Valuación 列,我们显示一个 Crecimiento(增长)列。为此,需要将上个月的 [SUM(Diferencia)] 视为 100% 才能应用三者规则

目前,这是我放在字段中的公式

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

(Mes = 月)

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

我试过 Fields!Diferencia.Value & Sum(Fields!Diferencia.Value, "Informacion") (第二个是我搜索后得到的Diferencia 在 Datasets 类别中)

Datasets category

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

知道这怎么可能吗?

先谢谢各位了

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

Edit 1 image

【问题讨论】:

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


    【解决方案1】:

    您可以使用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 数据集。 Scope 仍然是您的月份组 Mes1,但我们只是从上一个组条目(在本例中为上个月)获取数据。希望这是有道理的!

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

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

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

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

    设计看起来像这样。

    组内每一列的表达式是

    当前:

      =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") )
    

    最终的输出是这样的,希望是你所需要的。

    【讨论】:

    • 谢谢。我测试了你的建议,但是Previous 它占据了上一行,而不是代表上个月的左侧列。
    • 我刚刚意识到,我的测试没有任何行组。我已经更新了我的答案以包含正确的范围。试试这个,让我知道。
    • 修正后效果很好。非常感谢
    • 不客气。很高兴你把事情解决了。我应该停止在深夜在 StackOverflow 上发布答案,错误太多了! :)
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多