2011-11-28 95 views
8

我看起来很高,看起来似乎找不到一个相当直接的问题(我会认为)的答案。SSRS折线图不连接数据点

我有一个折线图,在一系列的几个点上有数据,但只有一组点连接起来。

有谁知道这是为什么?这与我的数据有关吗?如果是这样,我很难看到数据中可能解释此行为的任何关系。

这里是我的意思是:

Messed up data points

正如你可以看到,红色的钻石应该连接 - 同样可以对蓝色正方形和深蓝色的三角形来表示。有什么想法吗?

道歉,如果我的颜色不对 - 我是色盲。

回答

16

好吧,所以我解决了这个问题。

首先,为了使线条加起来,您需要设置该系列的EmptyPoint颜色。

  1. 在图表中选择一系列
  2. 在属性选项卡(而不是对话框)钻到EmptyPoint属性并设置颜色为黑色

这将让他们加入了 - 好极了!但是部分线条是彩色的,另一部分是黑色的,对吗?这有点愚蠢,尤其是考虑到如果您将颜色设置为EmptyPoint上的自动颜色,它将变为透明。

那么,我们需要让系列和EmptyPoint的颜色同步。 使用here的代码。我在报告的代码中添加了一些代码。

1)。右键单击报告上的空白处并选择“报告属性”
2)。在代码标签,粘贴如下:

Private colorPalette As String() = {"#418CF0", "#FCB441", "#E0400A", "#05642E", "#1A3B69", "#BFBFBF", "#E0400A", "#FCB441", "DarkBlue", "Tomato", "Orange", "CornflowerBlue", "Gold", "Red", "Green", "LightBlue", "Lime", "Maroon", "LightSteelBlue", "Tan", "Silver"} 
Private count As Integer = 0 
Private mapping As New System.Collections.Hashtable() 

    Public Function GetColor(ByVal groupingValue As String) As String 

     If mapping.ContainsKey(groupingValue) Then 
       Return mapping(groupingValue) 
     End If 

     Dim c As String = colorPalette(count Mod colorPalette.Length) 
      count = count + 1 
      mapping.Add(groupingValue, c) 
      Return c 
    End Function 

然后我们需要调用这个代码设置系列和EmptyPoint的颜色时。

  1. 选择系列
  2. 在属性选项卡贴下面的内容(与您的系列组名称替换WhateverTheGroupIsForYourSeries):=Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)
  3. 钻到EmptyPoint系列属性的色彩元素
  4. 粘贴与第二点相同的文本[例如=Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

瞧!你完成了! 我不敢相信这是多么困难:D

+0

一切工作正常,直到我尝试了步骤2和4.问题是与访问GetColor函数。看起来在定义GetColor函数的报告属性中编写的代码在颜色元素中无法访问。任何想法如何解决这个问题。我正在使用RDLC,而不是报告服务上的RDL。 – learner

+0

找出我的错误!我提供的系列名称有一个错字。你的解决方案奏效谢谢。我现在看到的唯一问题是传说的颜色混乱了。有不止一个相同颜色的外观。 – learner

+0

我正在使用CountRows()来计算我的Y值,这给了我空错点的错觉,但却是实际值为零的点。为了解决这个问题,我将我的Y值更改为 = IIF(CountRows()> 0,CountRows(),Nothing) – Towler

1

我只是有一个问题,它显示的是标记而不是线条。我最终通过将表达式包装在一个CInt()中将其转换为整数来解决它。

+0

你能解释一下这个代码示例吗?我有兴趣尝试此解决方案。 –

+0

这个解决方案对我来说非常合适。选择图表值字段,单击箭头并选择表达式,然后用CINT([您的表达式])将所有内容包装在内。谢谢SteveCav – MrsTapp

0

处理这个问题的另一种方法是做一个递归选择(如果你有非常大的数据集不这样做,它会杀死性能)。所以,你可以让你的数据集:

SELECT *, ROW_NUMBER() over(partition by Store order by Date desc) as rn 
FROM StorePerformance 

现在你可以有你的类别组RN(它应该由RN和排序由RN群)一个标签,但选择的日期。这仍然会在x轴上显示日期,但由于您正在通过rn进行分组,因此数据仍然是连续的,并且所有行都会连接。你的传奇仍然会匹配。

我还没有深入了解这个数据点有多大,因为我们正在绘制行号和显示日期,但是如果您主要关注的是可视化行中的趋势并且不关心在哪里他们在某个特定的时间点相互关联,它会为你服务。否则,我会按照原来的方式离开图表,只读取绘图点,这些点仍然是有效的数据。