如何在SSRS报告构建器

时间:2016-03-14 16:15:42

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

我正在使用带有SharePoint列表的SSRS报表生成器。我在报表生成器中创建了一个矩阵,通过组织站点评估状态进行分组。我希望能够设置保存组织名称的单元格的背景颜色,具体取决于属于该组织的站点的整体评估状态。

我的网站评估状态值为“未启动”,“正在进行中”,“已完成”。如果组织的任何站点的状态为“未启动”,则组织单元的背景颜色为红色。只要组织的所有站点都处于“进行中”状态,组织的背景单元格就是黄色。最后,只要所有组织站点的值都是“完整”,那么组织的背景颜色就是绿色。

Excel中的示例 Example using Excel

我知道如何使用表达式来调用代码来更改单元格的背景颜色,但不知道如何传递我需要的值或循环遍历这些值。我想我必须在自定义代码部分用VB编写一些东西,但不知道如何在一个包含Report Builder的组中循环

1 个答案:

答案 0 :(得分:2)

尝试在Organization的背景颜色属性中使用此表达式:

=Switch(
Array.IndexOf(LookupSet(Fields!Organization.Value,Fields!Organization.Value,Fields!Status.Value,"DataSet2"),"Not Started")>-1,"Red",
Array.IndexOf(LookupSet(Fields!Organization.Value,Fields!Organization.Value,Fields!Status.Value,"DataSet2"),"In Progress")>-1,"Yellow",
Array.IndexOf(LookupSet(Fields!Organization.Value,Fields!Organization.Value,Fields!Status.Value,"DataSet2"),"Complete")>-1,"Green"
)

它产生了这个:

enter image description here

更新1:

Switch函数评估每个案例:

  1. 状态列包含Not Started
  2. 状态列包含In Progress值。
  3. 状态列包含Complete个值。)
  4. 为了检查“状态”列中是否存在Not Started值,我使用了IndexOf()LookupSet()个函数。 LookupSet将为我提供一个包含每个组织状态的数组,因此使用IndexOf我搜索未开始,正在进行或完成值。如果找到一个值,它将返回存储在数组中的索引,否则返回-1。

    更新2:基于用户评论的版本。

    首先,您必须了解Switch功能在SSRS中的工作原理。实际上,它非常简单,每一行都根据Switch函数的每个case表达式进行评估。当一行匹配条件时,有一个Not Started值,即根据Switch函数中的每个条件计算下一行,依此类推。

      

    请注意,案例按照编写顺序进行评估。所以在我们的   方案首先根据条件对每一行进行评估   如果条件为Not Started,则包含false个值   继续到下一个条件,如果它是false它继续   下一个条件等等,直到条件为真或所有条件   被评估。

    如果有帮助,请告诉我。