Линейная диаграмма SSRS, не соединяющая точки данных - PullRequest
10 голосов
/ 28 ноября 2011

Я выглядел высоко и низко и не могу найти ответ на то, что кажется довольно простым вопросом (я бы подумал).

У меня есть линейный график, где есть данные нанесколько точек в серии, но только один набор точек связывает.

Кто-нибудь знает, почему это так?Это связано с моими данными?Если это так, я изо всех сил пытаюсь увидеть какие-либо отношения в данных, которые могут объяснить это поведение.

Вот что я имею в виду:

Messed up data points

Как видите, красные алмазы должны соединяться - то же самое можно сказать и о синих квадратах итемно-синие треугольники.Есть мысли?

Извиняюсь, если мои цвета неправильные - я дальтоник.

Ответы [ 3 ]

16 голосов
/ 29 ноября 2011

Хорошо, я решил это.

Во-первых, чтобы соединить строки, необходимо установить цвет EmptyPoint для серии.

  1. выберите свою серию на графике
  2. На вкладке свойств (не в диалоговом окне) перейдите в свойство EmptyPoint и установите цвет Черный

Это заставит их объединиться - да! Но часть линии - это цвет, а другая часть - черная, верно? Это немного глупо, особенно если учесть, что вы оставляете цвет на автоматическом в EmptyPoint, что он будет прозрачным.

Итак, нам нужно синхронизировать серию и цвета 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.

  1. Выберите серию
  2. На вкладке свойств вставьте что-нибудь следующее (замените WheverTheGroupIsForYourSeries на имя группы рядов): =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)
  3. Разверните до элемента цвета свойства EmptyPoint Series
  4. Вставьте тот же текст, что и во втором пункте [например, =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

И вуаля! Вы сделали! Я не могу поверить, насколько это излишне сложно: D

1 голос
/ 13 сентября 2016

У меня просто была проблема, когда он показывал маркеры, а не линии. В итоге я решил ее, обернув выражение в CInt (), чтобы преобразовать его в целое число.

0 голосов
/ 13 сентября 2016

Другой способ справиться с этим - сделать рекурсивный выбор (если у вас очень большие наборы данных, не делайте этого, это снижает производительность).Таким образом, вы могли бы сделать свой набор данных:

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

Теперь вы можете иметь свою группу категорий rn (она должна группироваться по rn и сортироваться по rn), но выбрать дату для своей метки.Это по-прежнему будет отображать дату на вашей оси x, но поскольку вы группируете по rn, данные все равно будут непрерывными, и все линии будут соединены.Кроме того, ваша легенда будет по-прежнему соответствовать.

Я до сих пор не изучил, насколько это смещает точки данных, поскольку мы строим графики с номером строки и отображаем дату, но если вы в основном заинтересованы в визуализации трендов влинии и не так заботятся о том, где они находятся в данный момент времени по отношению друг к другу, это послужит вам просто отлично.В противном случае я бы оставил график таким, какой он есть, и просто прочитал точки графика, которые все еще являются действительными данными.

...