SSRS создает тепловую карту, окрашивая цвет фона текстового поля в матрице - PullRequest
0 голосов
/ 03 октября 2019

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

Вот как выглядит матрица без закрашенных цветов. в:

enter image description here

sql

Что я хочу сделать, это превратить эту матрицу в сортировкутепловой карты, где чем выше число, тем оно краснее по сравнению с каким-то максимальным значением.

Я использую код, который я нашел здесь -> https://social.technet.microsoft.com/wiki/contents/articles/40153.ssrs-how-to-apply-heat-map-color-formatting.aspx

Public Function HeatMapColorGradate( _
  ByVal Value As Double _
, ByVal MaxPositive As Double _
, ByVal Neutral As Double _
, ByVal ColStr As String) As String
'------------------------------------------------------------------------------------------------
' Purpose:  To use a color gradations on a heatmap report
' Example:  BackgroundColor =Code.HeatMapColorGradate(25, 100, -10, Variables!ColorEventCountGradate.Value)
'           BackgroundColor =Code.HeatMapColorGradate(dayValue, maxValue, 0, "#2322EE")
' Note:     Use a negative number as the "Neutral" number to avoid too light of a color
'------------------------------------------------------------------------------------------------
Const Shd As Double = 255
Dim ColVar1      As Integer = Convert.ToInt32(Left(Right(ColStr, 6), 2), 16)
Dim ColVar2      As Integer = Convert.ToInt32(Left(Right(ColStr, 4), 2), 16)
Dim ColVar3      As Integer = Convert.ToInt32(Right(ColStr, 2), 16) 'Find Largest Range 'Split the #RGB color to R, G, and B components
Dim decPosRange  As Double = Math.Abs(MaxPositive - Neutral) 'Find appropriate color shade
Dim iColor1      As Integer = ColVar1 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar1) / decPosRange)))
Dim iColor2      As Integer = ColVar2 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar2) / decPosRange)))
Dim iColor3      As Integer = ColVar3 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar3) / decPosRange))) 'Return the new color
Dim heatMapColor As String = "#" & iColor1.ToString("X2") & iColor2.ToString("X2") & iColor3.ToString("X2") 'Reduce a shade for each of the R,G,B components

    Return heatMapColor

End Function

Это функция, которая принимает текущее значение и максимальное значение и соответственно окрашивает ячейку.

Моя проблема в том, что для моей матрицы значение текущего текстового поля равно = Sum (Fields! Touches.ValueОднако текстовое поле для максимального значения точно такое же, = Sum (Fields! Touches.Value). Но так как оно находится в другой группе, оно дает другой результат (сумма предыдущих сумм). Так что, если яиспользуйте эти два значения, я просто получаю один и тот же темный цвет в каждом текстовом поле.

enter image description here

Может быть, я использую неправильное значение и максимальное значение? У кого-нибудь есть советы как это сделать?

...