SSRS 2008 R2计算系列(中位数)忽略自定义格式

时间:2013-09-04 00:23:39

标签: reporting-services charts

我在Visual Studio for SSRS 2008 R2中创建了一个范围图表,为此我添加了一条中间线。但是,SSRS会很乐意忽略我为此中间线设置的任何格式,除非将范围格式的相同设置设置为none / automatic。因此它将继承范围的颜色,标记和大小。供参考:

Bad Graph 1

请注意顶部的微弱长线(很难看到)与该范围的颜色相同。我还添加了移动平均线(深蓝色)线,以表明它不仅仅是使用计算出的系列问题。

Bad Graph 2

这里我将范围设置为“自动”,这意味着该线采用我设置的红色,但仍然没有采用所需的厚度。 (我在这里将Median线设置为Red以获得更好的对比度。)

Bad Graph 3

这就是我想要完成的事情。 (不是所需的最终颜色/宽度,但这显示了设置与创建的内容之间的差异。)

有没有办法让计算出的行停止继承范围的设置?我找到了this,但是那里列出的解决方法对我不起作用。如果没有,有没有办法可以使用我自己的线来计算中位数,而不是计算出的系列?

1 个答案:

答案 0 :(得分:0)

今天和老板谈话,我需要AVG(),而不是中位数。这就是人生。

但是我已经想出了一个解决方法,使Median成为图表中的一部分,因此它与范围无关。我认为这是答案(虽然它确实回答了我的第二个问题),因为它需要相当多的额外工作,但是如果有人必须在他们的中位数范围图和谷歌将他们带到这个问题,我认为分享这个是值得的:

解决方案一(简易模式)

(这只有在你不关心Range的颜色时才有用)

将范围的Color设置为Automatic,然后将派生/计算系列的Color设置为您想要的值。要更改派生系列的BorderMarker格式,请在基础范围内更改它们(范围图表类型似乎忽略这些属性,至少就我所知。)请注意设置无论其他设置如何,范围BorderStyle上的None都会使中位数无法显示。

解决方案二(硬模式)

这是我在被告知使用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。从该列表中,选择您选择的Line,然后单击OK。您可能必须将值数据更改回Median(如果它显示为“Y Value”)。而已!现在,您将中位数放在一个单独的行中,这样您就可以根据自己的内容对其进行格式化。

然而,这是相当的解决方法(除了你想要进一步加入两者之外,还需要一个单独的DataSet,所以如果你可以避免它,我会推荐它;并且,正如我所说,它不是原始问题的解决方案(可能是一个错误,因此除非在以后的版本中修复,否则可能永远不会存在错误。)