如何在 SSRS 中的 table 上创建热图?
How to create heat map on a table in SSRS?
如何在 SSRS 中创建这样的内容?颜色将根据一行中的值从红色变为绿色(Underwriter)。所有这些都在一个组中:
您可以通过右键单击各个单元格并根据表达式设置填充颜色来执行此操作:
在下图中,我错误地将“==”放在了应该是“=”的地方
下面给大家举个例子:
是分别对 ID30、ID60 和 ID90 字段使用以下表达式创建的:
ID30:
=IIF(Fields!ID30.Value>="0" And Fields!ID30.Value<="100" ,"#c6c626",IIF(Fields!ID30.Value>="100" And Fields!ID30.Value<="200" ,"#c6c627",IIF(Fields!ID30.Value>="200","#9e2424","red")))
ID60:
=IIF(Fields!ID60.Value>="0" And Fields!ID60.Value<="100" ,"#c6c626",IIF(Fields!ID60.Value>="100" And Fields!ID60.Value<="200" ,"#c6c627",IIF(Fields!ID60.Value>="200","#9e2424","red")))
ID90:
=IIF(Fields!ID90.Value>="0" And Fields!ID90.Value<="100" ,"#c6c626",IIF(Fields!ID90.Value>="100" And Fields!ID90.Value<="200" ,"#c6c627",IIF(Fields!ID90.Value>="200","#9e2424","red")))
我想到了一种让颜色实际上是渐变的方法,而不是基于嵌套的 IF 语句。此方法使用理论最小值和最大值(如果需要精确,则可以将实际最小值和最大值设置为变量)和 rgb 整数值,并生成 SSRS 的颜色十六进制代码。
转到报表属性>代码并粘贴到此函数中:
Public Function HeatMap(ByVal Value As Double _
, ByVal MinVal As Double _
, ByVal MaxVal As Double _
, ByVal RValLo As Double _
, ByVal GValLo As Double _
, ByVal BValLo As Double _
, ByVal RValHi As Double _
, ByVal GValHi As Double _
, ByVal BValHi As Double _
) As String
Dim DiffPercent As Double
Dim RNew As Integer
Dim GNew As Integer
Dim BNew As Integer
Dim HeatMapColor As String
If Value = Nothing Then
RNew = 255
GNew = 255
BNew = 255
ElseIf Value <= MinVal Then
RNew = RValLo
GNew = GValLo
BNew = BValLo
ElseIf Value >= MaxVal Then
RNew = RValHi
GNew = GValHi
BNew = BValHi
Else
DiffPercent = (Value - MinVal) / (MaxVal - MinVal)
RNew = RValLo - Round((RValLo - RValHi) * DiffPercent, 0)
GNew = GValLo - Round((GValLo - GValHi) * DiffPercent, 0)
BNew = BValLo - Round((BValLo - BValHi) * DiffPercent, 0)
End If
HeatMapColor = "#" & Hex(RNew) & Hex(GNew) & Hex(BNew)
HeatMap = HeatMapColor
End Function
然后在计算热图值的单元格中,使用后台格式表达式中的函数,例如:
=Code.HeatMap(Sum(Fields!Orders.Value) / Sum(Fields!Orders.Value, "Tablix1"), 0, .2, 255, 255, 255, 99, 190, 123)
在此示例中,理论上存在 0 和 .2(0% 和 20%)的低值和高值,并且颜色将介于低端的白色和高端的绿色阴影之间。任何小于最小值的东西都会得到最小颜色,任何大于最大值的东西都会得到最大颜色。如果您想在色轮上的两种颜色之间切换,并且如果您想使用红色表示负值、白色表示零、绿色表示正值,这也会起作用,您只需使用 IF 语句并使用函数两次,一次用于负值,一次用于 >= 0。只需根据需要替换 rgb 值。
如何在 SSRS 中创建这样的内容?颜色将根据一行中的值从红色变为绿色(Underwriter)。所有这些都在一个组中:
您可以通过右键单击各个单元格并根据表达式设置填充颜色来执行此操作:
在下图中,我错误地将“==”放在了应该是“=”的地方
下面给大家举个例子:
是分别对 ID30、ID60 和 ID90 字段使用以下表达式创建的:
ID30:
=IIF(Fields!ID30.Value>="0" And Fields!ID30.Value<="100" ,"#c6c626",IIF(Fields!ID30.Value>="100" And Fields!ID30.Value<="200" ,"#c6c627",IIF(Fields!ID30.Value>="200","#9e2424","red")))
ID60:
=IIF(Fields!ID60.Value>="0" And Fields!ID60.Value<="100" ,"#c6c626",IIF(Fields!ID60.Value>="100" And Fields!ID60.Value<="200" ,"#c6c627",IIF(Fields!ID60.Value>="200","#9e2424","red")))
ID90:
=IIF(Fields!ID90.Value>="0" And Fields!ID90.Value<="100" ,"#c6c626",IIF(Fields!ID90.Value>="100" And Fields!ID90.Value<="200" ,"#c6c627",IIF(Fields!ID90.Value>="200","#9e2424","red")))
我想到了一种让颜色实际上是渐变的方法,而不是基于嵌套的 IF 语句。此方法使用理论最小值和最大值(如果需要精确,则可以将实际最小值和最大值设置为变量)和 rgb 整数值,并生成 SSRS 的颜色十六进制代码。
转到报表属性>代码并粘贴到此函数中:
Public Function HeatMap(ByVal Value As Double _
, ByVal MinVal As Double _
, ByVal MaxVal As Double _
, ByVal RValLo As Double _
, ByVal GValLo As Double _
, ByVal BValLo As Double _
, ByVal RValHi As Double _
, ByVal GValHi As Double _
, ByVal BValHi As Double _
) As String
Dim DiffPercent As Double
Dim RNew As Integer
Dim GNew As Integer
Dim BNew As Integer
Dim HeatMapColor As String
If Value = Nothing Then
RNew = 255
GNew = 255
BNew = 255
ElseIf Value <= MinVal Then
RNew = RValLo
GNew = GValLo
BNew = BValLo
ElseIf Value >= MaxVal Then
RNew = RValHi
GNew = GValHi
BNew = BValHi
Else
DiffPercent = (Value - MinVal) / (MaxVal - MinVal)
RNew = RValLo - Round((RValLo - RValHi) * DiffPercent, 0)
GNew = GValLo - Round((GValLo - GValHi) * DiffPercent, 0)
BNew = BValLo - Round((BValLo - BValHi) * DiffPercent, 0)
End If
HeatMapColor = "#" & Hex(RNew) & Hex(GNew) & Hex(BNew)
HeatMap = HeatMapColor
End Function
然后在计算热图值的单元格中,使用后台格式表达式中的函数,例如:
=Code.HeatMap(Sum(Fields!Orders.Value) / Sum(Fields!Orders.Value, "Tablix1"), 0, .2, 255, 255, 255, 99, 190, 123)
在此示例中,理论上存在 0 和 .2(0% 和 20%)的低值和高值,并且颜色将介于低端的白色和高端的绿色阴影之间。任何小于最小值的东西都会得到最小颜色,任何大于最大值的东西都会得到最大颜色。如果您想在色轮上的两种颜色之间切换,并且如果您想使用红色表示负值、白色表示零、绿色表示正值,这也会起作用,您只需使用 IF 语句并使用函数两次,一次用于负值,一次用于 >= 0。只需根据需要替换 rgb 值。