【问题标题】:changing bar fill colours in ssrs chart更改 ssrs 图表中的条形填充颜色
【发布时间】:2012-06-23 11:47:16
【问题描述】:

SO Post

目前我的 RS 图表中有 5 个柱 - 未来可能有 7 个柱或 17 个柱或 27 个柱!

用几个小节我可以有这样的表达:

=iif(Fields!Market.Value = "Spain"
,"Gold"
,iif (Fields!Market.Value = "Denmark"
    , "Gray"
    , iif(Fields!Market.Value = "Italy"
        , "Blue"
        , "Purple"
        )
    )
)

如果我无法预测将包括多少个国家 + 我宁愿不必在“绿色”、“红色”等中硬编码,我该如何更改表达式?

我试过了,但是出错了:

=Switch(Mod(Fields!Rank.Value/CDbl(2))=CDbl(0), "Gold", 
   Mod(Fields!Rank.Value/CDbl(3))=CDbl(0), "Gray", 
   Mod(Fields!Rank.Value/CDbl(2))>CDbl(0) "Blue")

以上是完全不正确的语法:这有效:

=Switch(CDbl(Fields!Rank.Value Mod 2)=CDbl(0), "Gold", 
   CDbl(Fields!Rank.Value Mod 3)=CDbl(0), "Gray", 
   CDbl(Fields!Rank.Value Mod 2)>CDbl(0), "Blue")

好的 - 上面的运行(不知道如何!)但下面是基于 Dominic Goulet 的帮助,并且非常容易理解,并且可以扩展到更多颜色;这是 5 种颜色的解决方案:

=Switch(CDbl(Fields!Rank.Value Mod 5)=CDbl(0), "Gold", 
   CDbl(Fields!Rank.Value Mod 5)=CDbl(1), "Gray", 
   CDbl(Fields!Rank.Value Mod 5)=CDbl(2), "Green", 
   CDbl(Fields!Rank.Value Mod 5)=CDbl(3), "Red", 
   CDbl(Fields!Rank.Value Mod 5)=CDbl(4), "Pink")

【问题讨论】:

  • 你最后的开关不对。 12 将产生“Gold”,它应该是“Gray”。您应该使用 (Fields!Rank.Value Mod 3 = 0)、(Fields!Rank.Value Mod 3 = 1) 和 (Fields!Rank.Value Mod 3 = 2) 条件。

标签: reporting-services sql-server-2008-r2 ssrs-2008


【解决方案1】:

首先,您应该使用“Switch”,而不是使用许多“IIF”,这样更精简。

Switch(Fields!Market.Value = "Spain", "Gold",
       Fields!Market.Value = "Denmark", "Gray",
       Fields!Market.Value = "Italy", "Blue")

现在,如果您想要每个国家/地区的颜色,您应该将其存储在您的数据库中,并在需要时将其取出。这样一来,您拥有的每份报告中的国家/地区将始终具有相同的颜色。

【讨论】:

  • 认为我有一个更好的主意 - 对国家/地区(或报告中的任何维度)进行排名并将排名添加到数据中 - 然后查看该数字是否可以被 2 整除,如果可以,请给出它是一种颜色 - 否则是第二种颜色。
  • 这就是所谓的“交替颜色”。这是一种有效的技术,主要用于表格中以获取交替的行颜色。
  • 我刚刚将我的尝试添加到 OP ...你能看出它有什么问题吗:我希望得到 3 种交替颜色
  • 我有类似的问题,但我的问题是我不知道我会得到什么值......我会得到整数但我需要为我得到的每个整数设置一个颜色......你能指导我?
【解决方案2】:

最好是创建一个函数。为此,请转到报告属性,选择代码并输入此示例:

Public Function Color(ByVal Index as Integer) as String

Select Case Index
Case = 1        
    return "#a6cee3"    
Case = 2        
    return "#1f78b4"    
Case = 3        
    return "#b2df8a"    
Case = 4        
    return "#33a02c"    
Case = 5        
    return "#fb9a99"    
Case = 6        
    return "#e31a1c"    
Case = 7        
    return "#fdbf6f"    
Case = 8        
    return "#ff7f00"    
Case = 9        
    return "#cab2d6"    
Case = 10       
    return "#6a3d9a"    

End Select

End Function

在“系列属性->选择颜色->颜色的填充选项上选择fx 把这段代码

=Code.Color(rownumber(nothing))

每个条形都有一种颜色。

对于我从网站上获取的十六进制颜色:http://colorbrewer2.org/#type=qualitative&scheme=Paired&n=10 它显示了彼此匹配的最佳颜色,因此您无需考虑这一点。您可以添加任意数量的颜色

【讨论】:

  • 这对我来说是完美的。感谢您给出如此明确的答案。更新后的路径是右键单击图表中的条形然后“系列属性 -> 填充 -> 选择颜色 -> [fx] 按钮”。我所做的最后一个更改是将“选择案例索引”更改为“选择案例(索引 MOD 4)”并将案例值更改为 0 到 3。这允许我拥有无限数量的行。颜色在这 4 种颜色之间旋转。
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2011-08-03
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
相关资源
最近更新 更多