【问题标题】:MS Report Builder 3.0 Set same color for whole seriesMS Report Builder 3.0 为整个系列设置相同的颜色
【发布时间】:2015-11-13 13:18:11
【问题描述】:

我有一个chart,其中X axisdateY axis 是一些number。 我在每个series 上都有一个3 values,例如series 是一个数据by customer,所以我想为整个seriescustomer)设置唯一的color,所以所有values例如,图表上是blue,但有不同的line style,一个是solid,另一个是dotted等。 另外我不知道图表上的series 是什么,所以我不能只写一些switch 语句来定义colors

我没有在表达式中找到get color 或另一个Field 的任何选项。

有没有办法做到这一点?还是仅根据series (CustomerID) 为每个值生成选项?

这里是示例数据:

WITH CTE AS(
    select '2015-11-01' [Date], 1 CustomerID, 10 Value1, 15 Value2
    union
    select '2015-11-02' [Date], 1 CustomerID, 15 Value1, 12 Value2
    union
    select '2015-11-03' [Date], 1 CustomerID, 17 Value1, 13 Value2
    union
    select '2015-11-01' [Date], 2 CustomerID, 25 Value1, 10 Value2
    union
    select '2015-11-02' [Date], 2 CustomerID, 22 Value1, 13 Value2
    union
    select '2015-11-03' [Date], 2 CustomerID, 15 Value1, 20 Value2
    union
    select '2015-11-01' [Date], 3 CustomerID, 15 Value1, 30 Value2
    union
    select '2015-11-02' [Date], 3 CustomerID, 19 Value1, 20 Value2
    union
    select '2015-11-03' [Date], 3 CustomerID, 12 Value1, 9 Value2
)
select
    CustomerID,
    [Date]
    ,CrossApplied.Val
    ,CrossApplied.Num
from CTE
CROSS APPLY 
   (VALUES (Value1, 1),
           (Value2, 2))
    CrossApplied (Val, Num)

还有Chart

还有Chart Settings

如您所见,每个Customer 有2 个Values,我希望这个Values 与图表上的color 相同。就像第 1 - 1 行和第 1 - 2 行有相同的颜色 (Blue),第 2 - 1 和 2 - 2 行有 Red 颜色等。

【问题讨论】:

  • 编辑您的问题以包含您现在获得的图表的屏幕截图。
  • @alejandro 我已经添加了示例。
  • 我已经根据您的 cmets 更新了我的答案。

标签: reporting-services charts reporting ssrs-2012 reportbuilder


【解决方案1】:

如果用于对系列进行分组的字段是可变的,我首先想到的是添加另一列,让您可以分隔每个组,以便让每个 Customer 具有不同类型的边界线。

我使用此示例数据重新创建了您的场景:

更新:基于您的 cmets 的版本。

WITH CTE AS(
    select '2015-11-01' [Date], 1 CustomerID, 10 Value1, 15 Value2
    union
    select '2015-11-02' [Date], 1 CustomerID, 15 Value1, 12 Value2
    union
    select '2015-11-03' [Date], 1 CustomerID, 17 Value1, 13 Value2
    union
    select '2015-11-01' [Date], 2 CustomerID, 25 Value1, 10 Value2
    union
    select '2015-11-02' [Date], 2 CustomerID, 22 Value1, 13 Value2
    union
    select '2015-11-03' [Date], 2 CustomerID, 15 Value1, 20 Value2
    union
    select '2015-11-01' [Date], 3 CustomerID, 15 Value1, 30 Value2
    union
    select '2015-11-02' [Date], 3 CustomerID, 19 Value1, 20 Value2
    union
    select '2015-11-03' [Date], 3 CustomerID, 12 Value1, 9 Value2
)
select
    CustomerID,
    [Date]
    ,CrossApplied.Val
    ,CrossApplied.Num
    ,DENSE_RANK() OVER (ORDER BY CustomerID) as GroupNumber
from CTE
CROSS APPLY 
   (VALUES (Value1, 1),
           (Value2, 2))
    CrossApplied (Val, Num)

如果您想为每个 CustomerID 设置不同的颜色 您必须添加 DENSE_RANK() by CustomerID 将此行作为新列添加到您的查询中(检查上面的查询):

DENSE_RANK() OVER (ORDER BY CustomerID) as GroupNumber

现在您有一个列 GroupNumber,可让您识别 CustomerID 所属的组。

这是折线图中可能的数据排列方式

要为每个 CustomerID 获得不同的线条颜色,我使用的是 GroupNumber 字段。

=CHOOSE(Fields!GroupNumber.Value,"Blue","Red","Green","Black","Yellow")

根据您拥有的不同CustomerID 的数量添加颜色数量,在我的示例中,我添加了 5 种颜色,因此每个CustomerID 将采用一种颜色来绘制其线条..

这将产生以下图表。

在本例中,我的查询生成了 3 个不同的CustomerID,因此它将以三种不同的颜色显示线条。 CHOOSE 表达式中的前三个:蓝色、红色和绿色。没有使用黑色和黄色,因为没有更多不同的CustomerID

如果这对你有帮助,请告诉我。

【讨论】:

  • 感谢@alejandro 的回复,这很有帮助,但我无法为系列选择颜色,因为我不知道CustomerID 将在报告中显示什么。同样在您的基本数据中,每个客户都有唯一的 ID GroupNumber,在我的真实情况下,每个值都有自己的 GroupNumber,例如:CustomerID |日期 |价值 |第 1 组 | d1 | x1 | 1 1 | d1 | x2 | 2 2 | d1 | x1 | 1 2 | d1 | x2 | 2 1 | d2 | x1 | 1 1 | d2 | x2 | 2 2 | d2 | x1 | 1 2 | d2 | x2 | 2
  • 所以我想把你的第一张和第二张图表放在一个图表上。所以给每个Customer分配了唯一的颜色,每个Value都有这个unique color但不同的border color。有没有办法在图表上添加额外的线而不添加新的Series
  • 正如我所说,我不知道确切的客户数量,大约是 15 个,但我不能只写 CHOOSE 因为它超过 5 个。有没有可能重新创建 @987654351 @ 颜色生成默认设置,所以我可以根据GroupNumber 而不是实际值生成颜色?
  • @Towelie,使用调色板颜色将绘制不同颜色的每一行我的建议是在CHOOSE 表达式中设置任意数量的颜色。你可以放 30 种或更多颜色,但我怀疑你想在这种图表中显示 30 条线。
猜你喜欢
  • 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
相关资源
最近更新 更多