我正试图在ssrs 2012中创建一个列,以显示中位成本。
我已经搜索了很长一段时间,并编写了一个PERCENTILE_CONT查询来尝试实现这一点。
这是我使用的查询:
SELECT srt.Name,
cast(sum(sr.price) as int) as AvgCost,
cast(sum(sr.cost) as int) as AvgTransCost,
cast(avg(sr.TotalTimeSpent) as int) as TotalTimeSpent,
percentile_cont(.5) WITHIN GROUP(ORDER BY sum(sr.price)) OVER(PARTITION BY srt.Name) AS MedianSpend
from
ServiceReq sr, ServiceReqTemplate srt当我运行报告时,结果如下:

这是中位数吗?为什么其他所有的成本和中介都是一样的呢?如果我将PERCENTILE_CONT(.5)更改为PERCENTILE_CONT(.9),则中间列没有变化--这使我相信这是中位数的错误值:(
发布于 2014-10-30 13:14:17
您使用的是PERCENTILE_CONT (CONT =连续的)
根据Server中列值的连续分布计算百分位数。结果是内插的,可能不等于列中的任何特定值。
(http://msdn.microsoft.com/en-us/library/hh231473.aspx)
而你想要的是PERCENTILE_DISC (磁盘=离散)
对于给定的百分位值P,PERCENTILE_DISC按ORDER子句对表达式的值进行排序,并以大于或等于P的最小CUME_DIST值(相对于相同的排序规范)返回值--例如,PERCENTILE_DISC (0.5)将计算表达式的第50百分位数(即中位数)。
(http://msdn.microsoft.com/en-us/library/hh231327.aspx)
https://stackoverflow.com/questions/26653858
复制相似问题