在 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
如何在 Visual Studio 2012 中编辑 s-s-rS 2008R2 报告?