在 s-s-rS 2008 R2 中计算 Tablix 中的加权平均值

Posted

技术标签:

【中文标题】在 s-s-rS 2008 R2 中计算 Tablix 中的加权平均值【英文标题】:Calculating Weighted Average in a Tablix in s-s-rS 2008 R2 【发布时间】:2014-01-07 18:31:27 【问题描述】:

我在 s-s-rS 2008 R2 中有一个 Tablix。列是部门。这些行是部门的不同统计数据。

其中一行必须显示来电的平均接听速度。我的数据集中有这个文件:AvgSoA

我还有一个字段用于显示已接听电话的总数:NumOfCalls

Tablix 的最后一列总结了所有部门。

我不知道的是如何计算加权平均速度来回答。

我当然知道什么是加权平均值...我只是不知道如何在 Tablix 的最后一列中计算它,因为我不知道有多少部门会“出现”在报告中。

谢谢。

【问题讨论】:

您能否添加一些简单的示例数据和您的预期结果? 【参考方案1】:

实际上显示多少部门并不重要,因为这些部门不参与加权平均计算。您需要的是一个单位的值,在您的情况下为AvgSoA,以及该值的出现次数,在您的情况下为NumOfCalls。对于加权平均值,您将这些乘积相加,然后除以出现次数的总和。

因此,在您的数据集中为 NumOfCalls 乘以 AvgSoA 创建一个字段 - 这是您的产品,我们称之为 Weight。现在我们每行都有我们的产品,所以在总行中,我们只需将Weight 相加并除以NumOfCalls 的总和即可获得加权平均值:

=SUM(Fields!Weight.Value) / SUM(Fields!NumOfCalls.Value)

【讨论】:

伟大的想法,克里斯。非常感谢!【参考方案2】:

我遇到了同样的问题,因为 Sum 确实正确处理了数据集中的空值。为了纠正这个问题,我发现最好对所有输入值进行空检查。如果我用你的例子:

Sum((IIF(IsNothing(Fields!NumOfCalls.Value),0,Fields!NumOfCalls.Value)/Sum(IIF(IsNothing(Fields!NumOfCalls.Value),0,Fields!NumOfCalls.Value)))*IIF(IsNothing(Fields!AvgSoA.Value),0,Fields!AvgSoA.Value))

我知道这看起来很麻烦,但是如果您删除 null 检查所有内容:

Sum((Fields!NumOfCalls.Value/Sum(Fields!NumOfCalls.Value))*Fields!AvgSoA.Value)

我不建议删除 null 检查,因为数据中的任何 null 值都会通过您的回答。

【讨论】:

您也可以使用自定义代码来解决此问题:公共函数除数(ByVal Dividend As Double,ByVal Divisor As Double) If IsNothing(Divisor) Or Divisor = 0 Return 0 Else Return Dividend/Divisor End If End Function 并在您的表达式中使用 Code.Divider(Fields!Dividend.Value, Fields!Divisor.Value)

以上是关于在 s-s-rS 2008 R2 中计算 Tablix 中的加权平均值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2 / s-s-rS 2008:服务水平报告创建

s-s-rS 2008 R2 - 导出到 Excel 时的 MAX TABS

生产环境中 s-s-rS 2008 R2 的权限

如何在 Visual Studio 2012 中编辑 s-s-rS 2008R2 报告?

是否可以在 Visual Studio 2010 中调用 s-s-rS 2008 R2 报告?

s-s-rS 2008r2 在报表管理器的主显示页面中截断报表描述