【问题标题】:SSRS line chart not connecting data pointsSSRS折线图未连接数据点
【发布时间】:2020-01-07 22:22:06
【问题描述】:

我从高处到低处,似乎都无法为看似非常简单的问题找到答案(我认为)。

我有一个折线图,其中有一个系列中多个点的数据,但只有一组点连接起来。

有人知道这是为什么吗?跟我的数据有关系吗?如果是这样,我很难在数据中看到任何可以解释这种行为的关系。

这就是我的意思:

如您所见,红色菱形应该是相互连接的——蓝色正方形和深蓝色三角形也是如此。有什么想法吗?

抱歉,如果我的颜色有误 - 我是色盲。

【问题讨论】:

    标签: join reporting-services graph charts line


    【解决方案1】:

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

    首先,为了让线条连接起来,您需要为系列设置EmptyPoint 颜色。

    1. 在图表中选择您的系列
    2. 在属性选项卡(不是对话框)中,深入到 EmptyPoint 属性并将颜色设置为黑色

    这会让他们加入 - 耶!但是线的一部分是彩色的,另一部分是黑色的,对吧?这有点傻,特别是考虑到如果您在 EmptyPoint 上将颜色保留为 Automatic,它将是透明的。

    那么,我们需要让系列和 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. 粘贴与第二点相同的文本 [e.g. =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

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

    【讨论】:

    • 在我尝试步骤 2 和 4 之前一切正常。问题在于访问 GetColor 函数。似乎在颜色元素中无法访问在报告属性中编写的定义 GetColor 函数的代码。任何想法如何解决这个问题。我使用的是 RDLC,而不是报告服务中的 RDL。
    • 发现我的错误!我提供的系列名称有错字。你的解决方案奏效了。谢谢。我现在看到的唯一问题是图例颜色搞砸了。有不止一种相同颜色的外观。
    • 我使用 CountRows() 作为 Y 值,这给了我空点的错觉,但实际点的值为零。为了解决这个问题,我将 Y 值更改为 =IIF(CountRows() > 0, CountRows(), Nothing)
    • 您的回答非常有用,为我指明了正确的方向。但是,我决定将线条颜色与我的数据一起提供,并将字段应用于线条颜色以及空点颜色,因此我可以完全控制,可以避免代码方法并使我的图例与线条颜色对齐。
    【解决方案2】:

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

    【讨论】:

    • 您能用代码示例进一步解释一下吗?我有兴趣尝试这个解决方案。
    • 这个解决方案非常适合我。选择图表值字段,单击箭头并选择表达式,然后用 CINT([您的表达式]) 包装其中的任何内容。谢谢史蒂夫卡夫
    【解决方案3】:

    另一种处理方法是进行递归选择(如果您有非常大的数据集,请不要这样做,它会降低性能)。所以你可以制作你的数据集:

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

    现在您可以将类别组设为 rn(它应该按 rn 分组并按 rn 排序),但为其标签选择日期。这仍将在您的 x 轴上显示日期,但由于您按 rn 分组,因此数据仍将是连续的,并且所有线都将连接。您的传奇也将匹配。

    自从我们使用行号和显示日期进行绘图以来,我还没有深入研究这会改变数据点的程度,但如果您主要关注线条趋势的可视化而不关心它们的位置彼此相关的特定时间点,它会为你服务就好了。否则我会保留图表的原样,只读取仍然是有效数据的绘图点。

    【讨论】:

      【解决方案4】:

      Solution

      只需将您的字段!(YourSeriesGroup).Value 放在系列组的上方 Fields!(YourCategoryGroup).Value in Category Groups,您的系列组应该同时在系列组和类别组中(应该在您的初始类别组之上)。

      然后右键单击水平轴并选择水平轴属性。将轴类型设置为标量,然后单击确定。

      Result

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多