SSRS - 聚合字段的总和

时间:2021-03-18 09:19:23

标签: sql-server reporting-services reportbuilder

我有一份报告,其中显示了每位员工的个人销售佣金。

enter image description here

销售佣金的表达式为:

=Sum(Fields!Total_Comission.Value)*Parameters!Distribution_Factor.Value*Fields!Individual_Factor.Value

现在我想为这个字段添加一个总数。如果我只是右键单击单元格并单击“添加总计”,它会起作用,但会给出错误的总计。 如果我尝试像这样对字段求和:

=Sum(Reportitems!GO_Prov.Value)

我收到错误:

<块引用>

textrun 'Textbox93.Paragraphs[0].TextRuns[0]' 的值表达式在报表项上使用聚合函数。聚合函数只能用于页眉和页脚中包含的报表项。

是否有一种解决方法可以对这个 tablix 的聚合字段求和?也许有代码?

提前致谢。

更新 1:

不幸的是我不知道如何编写自定义代码。但我找到了这个代码:

Public Total_lookup_Sum As Integer = 0 

Public Function Lookup_Sum(ByVal value As Integer) As Integer
 
    Total_lookup_Sum = Total_lookup_Sum + value    

 Return value 

End Function

我现在用于销售佣金的表达方式是:

=Code.Lookup_Sum((Sum(Fields!Total_Comission.Value)*Parameters!Distribution_Factor.Value*Fields!Individual_Factor.Value))

我想要求和的字段的表达式是:

=Code.Total_lookup_Sum

现在出现错误:

<块引用>

自定义代码第 0 行有错误:[BC30205] End of 预期的声明。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

像这样的场景在 SSRS 中可能很棘手。根据您的描述(即使屏幕截图并未真正显示所有内容),我猜您已经按销售人员分组了行。在计算佣金的列中,您得到了“Total_commission”的总和,但您刚刚得到了未汇总的“Individual_Factor”值。再次进行猜测,但每个底层行(按员工)必须具有相同的“Individual_Factor”值(因此实际上使用 Min(Individual_Factor) 会得到相同的结果)。

但是,当您尝试使用相同的公式(甚至是公式的推导)并对所有行进行总体聚合时,SSRS 如何知道要使用哪个“Individual_Factor”值?您不需要 Min() 或 Max(),因为这只是所有销售人员的最低或最高值。

您通过代码提出的解决方法的建议通常是我处理此问题的方式。您需要一个报告变量,例如“Commission_Grand_Total”,然后您需要报告代码中的一个函数接受 1 个参数,并且在该函数中您将参数值添加到变量中。最简单的做法是让参数成为函数的返回值。

然后,在您当前拥有佣金公式的字段中(在销售人员行上),该字段中的表达式变为 =TheFunctionYouCreate((Sum(Fields!Total_Comission.Value)*Parameters!Distribution_Factor.Value*Fields!Individual_Factor.Value))

通过将公式传递给函数,您可以实现两件事:

  1. 该函数将获取每个销售人员的计算佣金并将其添加到您的报告变量中

  2. 函数会输出你传入的参数值(因为你想在每个销售员的行上显示计算出的佣金金额)

最后,为了显示总体总数,该字段的表达式只是保存总体总数的报表变量(随着 SSRS 写出每个销售人员的记录而累计添加)

提示:我有时会做同样的事情,但如果我不想显示逐行值(我只想计算累计总数),只需将调用隐藏列中的函数。 SSRS 仍会在渲染每一行时运行该函数,但显然它只是不显示该函数的结果。

报告变量和代码的一些 MS 参考

https://docs.microsoft.com/en-us/sql/reporting-services/report-design/built-in-collections-report-and-group-variables-references-report-builder?view=sql-server-ver15

https://docs.microsoft.com/en-us/sql/reporting-services/report-design/add-code-to-a-report-ssrs?view=sql-server-ver15

答案 1 :(得分:0)

不幸的是,这是未经测试的,但是...

假设您有一个名为 EmployeeGroup 的员工行组,那么表达式将如下所示...

=SUM(
     Sum(Fields!Total_Comission.Value, "EmployeeGroup")
     * Parameters!Distribution_Factor.Value
     * FIRST(Fields!Individual_Factor.Value, "EmployeeGroup")
    )

内部表达式读作

Total_Comission 与当前员工组的总和 ... 乘以分配因子 ... 乘以当前员工组的第一个个体因素

外部表达式只是将所有员工级别的总和相加。

相关问题