SSRS - 聚合字段的总和

SSRS - Sum of an aggregated field

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

销售佣金的表达式为:

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

现在我想为该字段添加总计。如果我只是右键单击该单元格并单击添加总计,它可以工作但给出了错误的总计。 如果我尝试像这样对字段求和:

=Sum(Reportitems!GO_Prov.Value)

我收到错误:

The Value expression for the textrun 'Textbox93.Paragraphs[0].TextRuns[0]' uses an aggregate function on a report item. Aggregate functions can be used only on report items contained in page headers and footers.

是否有解决方法来对这个 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

现在我得到错误:

There is an error on line 0 of custom code: [BC30205] End of statement expected.

有办法解决吗?

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

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

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

然后,在您当前拥有佣金公式的字段中(在销售人员行),该字段中的表达式变为 =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

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

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

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

内部表达式读作

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

外部表达式只是对所有员工级别总和进行求和。