今天与我的老板交谈,我需要 AVG(),而不是中位数。这就是人生。
但我想出了一个解决方法,使中位数成为图表的一部分,因此它与范围无关。我确实不认为这是答案(尽管它确实回答了我的第二个问题),因为这需要相当多的额外工作,但是如果某人必须在他们的范围图和谷歌带他们回答这个问题,我认为分享这个是值得的:
解决方案一(简单模式)
(这只会在您不关心 Range 的颜色时有所帮助)
将 Range 的 Color 设置为 Automatic,然后将 Derived/Calculated Series 的 Color 设置为您想要的。要更改派生系列的Border 和Marker 格式,请在基础范围中更改它们(范围图类型似乎忽略了这些属性,至少据我所知。)请注意,设置BorderStyle无论其他设置如何,将 Range 设置为 None 都将阻止 Median 出现。
解决方案二(困难模式)
这是我在被告知改用 AVG() 之前所做的工作。而且,既然事情就是这样发展的,我基本上已经完成了。
仅获取中位数
首先,我从另一个问题中找到了this answer,这是一种找到中位数的好方法。不幸的是,这不涉及任何类型的分组,所以我不得不扩展它。我首先将最初返回的数据放入临时表@t。然后,我将查询更改为 INNER JOIN,并根据需要对子查询进行分组,得到以下结果:
SELECT (BottomHalf+TopHalf)/2 as Median, B.PeriodRaw, B.WeekNumber FROM
(SELECT MAX(Ratio) as BottomHalf, PeriodRaw, WeekNumber FROM
(SELECT TOP 50 PERCENT Ratio, PeriodRaw, WeekNumber FROM @t ORDER BY Ratio) m
GROUP BY PeriodRaw, WeekNumber) AS B
INNER JOIN
(SELECT MIN(Ratio) as TopHalf, PeriodRaw, WeekNumber FROM
(SELECT TOP 50 PERCENT Ratio, PeriodRaw, WeekNumber FROM @t ORDER BY Ratio DESC) n
GROUP BY PeriodRaw, WeekNumber) AS T
将其变成带范围的图表
然后我必须结合使用Max/Min 来获得可以在图表中使用的单个表格:
SELECT (BottomHalf+TopHalf)/2 as Median, MaxRatio, MinRatio, B.PeriodRaw, B.WeekNumber FROM
(SELECT MAX(Ratio) as BottomHalf, PeriodRaw, WeekNumber FROM
(SELECT TOP 50 PERCENT Ratio, PeriodRaw, WeekNumber FROM @t ORDER BY Ratio) m
GROUP BY PeriodRaw, WeekNumber) AS B
INNER JOIN
(SELECT MIN(Ratio) as TopHalf, PeriodRaw, WeekNumber FROM
(SELECT TOP 50 PERCENT Ratio, PeriodRaw, WeekNumber FROM @t ORDER BY Ratio DESC) n
GROUP BY PeriodRaw, WeekNumber) AS T
ON B.PeriodRaw = T.PeriodRaw AND B.WeekNumber = T.WeekNumber
INNER JOIN
(SELECT MAX(Ratio) as MaxRatio, PeriodRaw, WeekNumber FROM @t GROUP BY PeriodRaw, WeekNumber) X
ON B.PeriodRaw = X.PeriodRaw AND B.WeekNumber = X.WeekNumber
INNER JOIN
(SELECT MIN(Ratio) as MinRatio, PeriodRaw, WeekNumber FROM @t GROUP BY PeriodRaw, WeekNumber) N
ON B.PeriodRaw = N.PeriodRaw AND B.WeekNumber = N.WeekNumber
从这里开始很简单。像往常一样创建您的范围图,然后为中位数添加一个新值。右键单击该系列(在图表数据框或图表本身,没关系),然后单击Change Chart Type。从该列表中,选择您选择的线路并点击确定。您可能必须将值数据更改回中位数(如果它显示“Y 值”)。就是这样!现在,您将 Median 放在单独的一行中,以便您可以根据自己的喜好对其进行格式化。
但是,这是一种很好的解决方法(这也需要一个与原始数据集分开的数据集,除非您想进一步加入两者),所以如果您可以避免它,我会推荐它;而且,正如我所说,它不是原始问题的解决方案(可能是一个错误,所以可能永远不会有一个,除非它在以后的版本中得到修复。)