在 Microsoft 报表生成器中的列底部添加表达式的总和

问题描述 投票:0回答:1

我已经断断续续地这样做了几天,但我无法弄清楚。 我有一行根据学生人数进行一些计算。如果学校没有被命名为“坏学校”(不是真实姓名),那么我将 SRB 值除以 4 乘以 2 的总和加上非 srb 值除以 6 乘以 2 的总和。我得到 srb以及来自我的 sql 中案例的非 srb 值。

我需要该行的总和,但我无法让任何东西发挥作用。我认为它只是 (sum[Table]) 但这会引发错误。是否有捷径可寻? What I have

我只需要总行数What I need 我想不出如何将不好的学校加上 0.5 得出总和 我看过类似问题的其他一些答案,但我的似乎有额外的层使问题变得复杂

reporting-services sum row report builder
1个回答
0
投票

我根据上面评论的假设添加这个答案,所以如果这没有帮助,请提供我在评论中要求的所有详细信息。

我首先使用以下内容作为我的数据集查询创建一个简单的数据集。

declare @t table (school varchar(20), srb decimal (10,2), nonsrb decimal(10,2))

    INSERT INTO @t values 
    ('A', 1, 2), ('A', 2, 2), ('A', 3, 1),
    ('B', 11, 12), ('B', 12, 12), ('B', 13, 11),
    ('C', 21, 22), ('C', 22, 22), ('C', 23, 21)

    SELECT * FROM @t

然后,我使用一个简单的表格创建了一个新报告,添加了 3 列,然后添加了一个名为

grpSchool
的行组,该行组按“学校”分组。

我在组行中添加了一个表达式,该表达式与您的基本相同。表情是这样的。

=iif(
    Fields!school.Value = "B", 0.5
    , (
        (SUM(Fields!srb.Value)/4*.2)
        +(SUM(Fields!nonsrb.Value)/6*.2)
      )
     )

然后我添加了一个总行,并对 srb 和 nonsrb 列进行了求和,这些不是此答案所必需的,因此可以忽略。

然后我将以下表达式添加到总行中。

=SUM(
    iif(
        MAX(Fields!school.Value = "B", "grpSchool")
        , 0.5
        , (
            (Sum(Fields!srb.Value, "grpSchool") / 4 * 0.2) 
            + (Sum(Fields!nonsrb.Value, "grpSchool") / 6 * 0.2)
            )
        )
    )

基本上,这会评估整个数据集的原始表达式并对结果求和。然而,由于我们需要根据每所学校进行评估,我在总和中添加了上下文,因此

Sum(Fields!srb.Value, "grpSchool")
表示所提供上下文中 srb 的总和,在这种情况下,上下文是
"grpSchool"
,这是我们学校的名称行组。
最后,我们需要对“学校”执行相同的操作,但显然不能对其求和,因此我们可以仅使用
MAX()
,因为这对于每个行组中的每一行都是相同的。我们可以使用 MIN() ,因为它总是返回相同的值(A、B 或 C,具体取决于组)。

现在我们只需将返回值的结果相加即可。

供参考,报告设计如下......

最终输出如下所示..

© www.soinside.com 2019 - 2024. All rights reserved.