【问题标题】:SSRS chart lines not connectingSSRS 图表线未连接
【发布时间】:2016-01-02 09:10:40
【问题描述】:

我有一个 SSRS 折线图,它在 X 轴上以平方英尺绘制供应点,在 Y 轴上绘制价格。现在我真的不在乎让它漂亮,只是让线条正确显示。我正在按细分/生成器绘制点和分组。

例如,细分 A 有构建器 Y 和 Z。我想为细分 A 构建器 Y 与细分 A 构建器 Z 显示不同的颜色和线条。

问题是当另一个细分构建器组合的一个点打破该线时,这些线没有连接。

灰线和下面的点不是全部连接的,因为黄点在灰点之间,所以灰线不是连接到所有灰点。

如何使相同颜色(相同细分/生成器)的点通过线连接?

【问题讨论】:

    标签: reporting-services charts line


    【解决方案1】:

    正如我最近发现的那样,这个问题通常是由 SSRS 未正确处理数据中的null 值引起的。在没有看到您的数据的情况下,我无法确定这是原因,但nulls 是我遇到相同行为的罪魁祸首。

    解决方案通常涉及为系列上的EmptyPoint 属性的颜色分配值,有时与设置EmptyPointValue 一起指定null 处理。我在网上找到了很多关于这个问题的参考资料,但我只会发布最好的两个的链接,它们都在 StackExchange 上:

    1. 线程SSRS Line Chart NULL VALUE - Horizontal Line 包含对此问题的彻底讨论。给出的通常解决方法是使用IIf 为每一行硬编码颜色表达式,但有时这不是一个选项,特别是如果您分组的字段具有动态的、不可预测的值,就像我的数据集所做的那样。

    那里发布的图片描述了相同类型换行符的清晰示例。名为 trubs 的用户发布了一个代码示例,说明了如何设置 EmptyPoint,以防 Iif 起作用:

    =iif(isNothing(Fields!SelectedValue.Value),'No Color',"LightBlue")

    1. SSRS Line Chart Not Connecting Data Points 中的第一个回复详细说明了当EmptyPoint 值和nulls 是根本原因并且简单的硬编码IIfs 无法解决问题时的解决方法。虽然我还没有让我的线条颜色以我想要的方式匹配点标记,但我可以验证这个解决方案至少可以让你的线条恢复原状,并允许你为它们分配各种颜色。它相当简单,只需为几个颜色属性粘贴一些 VB 代码。

    在cmets部分被要求提供解决方案的详细信息,但不想抄袭,所以我将简单地直接引用JohnBob的答案:

    首先,为了让行加入,你需要设置 系列的 EmptyPoint 颜色。

    在图表中选择您的系列在属性选项卡中(不是 对话框)向下钻取 EmptyPoint 属性并将颜色设置为 变黑

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

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

    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。

    Select your series
    In the properties tab paste something the following (replace WhateverTheGroupIsForYourSeries with your series group name):
    

    =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value) 向下钻取到 EmptyPoint Series 属性的颜色元素 粘贴与第二点相同的文本[例如=Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

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

    我希望这会有所帮助。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 感谢您的提醒 - 今天晚些时候我会尝试用更多信息更新此内容。我想在提供足够的信息和不抄袭现有 StackExchange 线程的链接之间取得适当的平衡。这个问题可能会被标记为重复。我会这样标记它,看看模组是怎么想的。
    • 很高兴能找出被否决的原因。我费了很大的劲才为一个真正的技术问题提供详细的答案,所以我不知道如何改进答案。
    【解决方案2】:

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

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

    【讨论】:

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