基于条件制作动态报表
在使用报表时,用户往往希望某些“异常数据”能够突出显示,以便其更快速了解数据的总体状态。如: 性能数据一旦超过设定的阀值,则突出显示为黄色或者红色;在其他情况下显示为绿色。IBM Cognos Report Studio 就提供了这样一种机制,在用户生成报表的时候,能够自动根据开发人员事先设定好的条件以及显示格式,对报表进行动态显示。
在制作基于条件的动态报表时,需要注意三要素。第一个要素是条件,条件是用以判断的规则,通常为一个变量表达式及其一系列取值,如,上面的性能数据超过阀值。第二个要素是用于和条件绑定的特定数据项 (Data Item),条件表达式只有和具体的数据项相关,以数据项运行时的取值作为条件输入,才能达到动态显示报表的目的,如,上面提到的性能数据。第三个要素条件格式,即在条件表达式的某一特定取值下,报表显示的格式,如字体,颜色,阴影等。总得来说,基于条件的动态报表的实现就是根据某特定数据项在报表运行时的取值,计算变量表达式的取值,并根据变量表达式的取值,决定报表的显示格式。
Cognos 支持三种类型的变量:字符串变量,布尔变量和语言变量。以下的三小节将分别介绍使用这三种变量制作动态报表的过程。
使用字符串变量制作动态报表
在 2.1 节中,我们将介绍简单的使用字符串变量的制作动态报表的过程。我们希望实现根据项目状态的取值,动态显示报表中“项目状态”单元格的背景颜色:当项目状态为 R(Red) 时,项目状态单元格的背景显示为红色;当项目状态为 Y(Yellow) 时,项目状态单元格的背景显示为黄色;当项目状态为 G(Green) 时,项目状态单元格的背景显示为绿色;当项目状态为 C (Complete) 时,项目状态单元格的背景显示为蓝色。
步骤 1. 打开变量编辑窗口。点击 Explorer Bar 上的 Condition Explorer。点击弹出页面中的 Variables。见图 1。
图 1. 打开变量编辑窗口
步骤 2. 创建字符串变量。将 Insertable Objects 中的字符串变量(String Variable)拖拽到 Variables 部分。见图 2。
图 2. 创建字符串变量
步骤 3. 定义字符串变量表达式。在将字符串变量拖拽到 Variable 的过程中,系统会自动弹出变量表达式编辑窗口。在编辑窗口的左侧列出了可用于表达式的各种组件和数据项。可以通过拖拽的方法选择所需的数据项组合成变量表达式。以下的例子中,我们设定一个简单的变量表达式,这个变量表达式就等于报表中项目状态(PROJECT_STATUS)。见图 3。
图 3. 定义字符串变量表达式
步骤 4. 为字符串变量表达式赋值。选中字符串变量 String 1, 点击 Values 框下面的添加(Add)图标,在弹出的对话框中,输入希望添加的变量值,如 R (Red),然后点击 OK 按钮。此变量值就会被添加到 Values 的列表中。可以通过重复以上步骤,添加其他变量值。根据之前的描述,我们需要 R (Red), Y (Yellow), G (Green), C (Complete) 四个变量值。见图 4。
图 4. 为变量表达式赋值
步骤 5. 为字符串变量命名。在页面左下角的变量属性编辑窗口中,可以对创建的字符串变量进行重命名。在例子中,我们将变量重命名为 Project_Status. 见图 5。
图 5. 为字符串变量重命名
步骤 6. 打开需要绑定变量的报表。点击 Explorer Bar 上的 Page Explorer,点击打开需要编辑的报表。见图 6。
图 6. 打开需要绑定变量的报表
步骤 7. 首先点击选中报表中需要与变量绑定的元素。然后在左下角的属性编辑窗口中,点击 Style Variable 一项的编辑按钮,在弹出的窗口中,选择之前定义好的条件变量 Project_Status。见图 7。
图 7. 将报表中元素与字符串变量绑定
步骤 8. 为变量的不同取值设置相应的显示格式。点击 Explorer Bar 上的 Condition Explorer, 在变量 Project_Status 的取值列表中选择一个取值,如,点击 G。设置此取值对应的显示格式,如,Project_Status 单元格背景颜色显示为绿色。在选定取值的情况下设置的显示格式会自动和该取值相关联。重复以上步骤,设置其他取值下的显示格式。有一点需要注意,设置完特定的取值对应的显示格式后,选取 None 值,检查报表在不满足任何变量取值下的显示格式,确保报表可以正常显示。见图 8。
图 8. 为变量的不同取值设置相应的显示格式
使用布尔变量实现报表的动态显示
本节介绍如何利用布尔变量实现报表的动态显示。我们希望根据用户输入的值,显示或者隐藏列表中的某一列。在以下的例子中,报表按照部门展示各部门员工人数,包括 Regular 人数和 Vendor 人数。用户运行报表的时候可以选择是否显示 Vendor 人数一列。
步骤 1. 创建用于接收用户输入值的参数。在报表提示页面创建一个值提示,命名为 Display_para,点击完成按钮。见图 9。
图 9. 创建参数
步骤 2. 创建布尔变量。在提示页面选中值提示,在左侧的属性编辑窗口中,打开 Static Choices 编辑窗口,在 Variable 的下拉菜单中,选择新建布尔变量。并将布尔变量命名为 Display_bool。
图 10. 创建布尔变量
步骤 3. 定义布尔变量表达式。在可用参数(Parameters)列表中,选择在步骤 2 中创建的参数 Display_para。将 Display_para 拖拽到右侧的表达式定义(Expression Definition)窗口中,并参照图 11 定义表达式内容。
图 11. 定义布尔变量表达式
步骤 4. 为布尔变量赋值。布尔变量的两个 Use 值是 Yes 和 No,表示布尔变量真假两种状态。而我们在参数中显示给用户的则是 Display 值 “要”和“不要”。定义 Use 值和 Display 值的对应关系,使得布尔变量能接收用户选择的“要”或者“不要”,按照对应关系,转化成布尔变量 Yes 和 No,即布尔变量真假两种状态。
图 12. 为布尔变量赋值
步骤 5. 将报表中的 Vendor 列与布尔变量绑定。打开报表编辑页面,选中 Vendor 列,在列属性编辑窗口中,打开 Render Variable 编辑窗,在 Variable 列表中选择之前创建的布尔变量 Display_bool。
图 13. 将报表中指定的列与布尔变量绑定
步骤 6. 报表在不同选择值下的运行结果。
图 14. 报表在不同选择值下的运行结果
使用语言变量实现报表的全球化
2.3 节介绍如何利用报表语言变量实现报表的多语言显示。我们希望根据运行时用户的语言,实现同一报表对不同语言用户的不同显示:当用户运行语言为中文时:报表中的字符串显示为“中文”;当用户运行语言为英文时:报表中的字符串显示为“English”。
步骤 1. 打开变量编辑窗口。点击 Explorer Bar 上的 Condition Explorer。点击弹出页面中的 Variables。
步骤 2. 创建语言变量。讲 Inerstable Objects 中的语言变量(Language Variable)拖拽到 Variables 部分。见图 9。
图 15. 创建变量语言
步骤 3. 选择报表用户所在国家的语言。如:选择中文和英文。见图 10。
图 16. 选择语言
步骤 4. 为字符串变量命名。在页面左下角的变量属性编辑窗口中,将变量重命名为 Language_cn_en 见图 11。
图 17. 为语言变量重命名
步骤 5. 打开需要绑定变量的报表。点击 Explorer Bar 上的 Page Explorer,点击打开需要编辑的报表。
步骤 6. 首先选定报表中需要和语言变量绑定的字符串。然后左下角的属性编辑窗口中,点击 Text Source Variable 一项的编辑按钮,在弹出的窗口中,选择之前定义好的语言变量 Language_cn_en。见图 12。
图 18. 将文本与语言变量绑定
步骤 8. 设置不同语言下的显示内容。点击 Explorer Bar 上的 Condition Explorer,在 Variable Language_cn_en 的取值列表中选择一个取值,如,点击 Chinese。设置此取值对应的显示内容,如,”中文”。重复以上步骤,设置其他语言下的显示内容。见图 13。
图 19. 设置不同语言下的显示内容
步骤 9. 设置运行时的语言。点击运行按钮旁边的下拉列表,点击运行选项 (Run Options),在语言(Language)一栏中选择中文 (Chinese)。见图 14。
图 20. 设置报表运行时的语言
步骤 10. 以不同的语言运行报表。设置了报表运行时的语言后,点击运行按钮。见图 15。
图 21. 报表在不同语言下的运行结果
报表之间穿透钻取功能的实现
钻取功能是 Cognos Report Studio 中的重要的功能之一,包括同一报表不同层次 (Level) 之间的钻取:上钻 (Drill up ) 和下钻 (Drill down),还不同报表之间的穿透钻取 (Drill through)。我们在第 3 部分要介绍的是不同报表之前的穿透钻取功能的实现。
在设置钻取功能之前,需要准备好两个报表:概要报表和细节报表。概要报表是钻取功能的起点,在概要报表的某些数据项上触发穿透钻取操作。细节报表是钻取功能的终点,是原报表中某些信息更细节数据的显示。如:在概要报表中显示某部门总人数为 100 人,通过穿透钻取功能,在目标报表中可以查看这 100 人的详细信息。
从概要报表到细节报表的钻取过程中,通常伴有参数的传递。如:以上例子中的部门标识。
报表钻取功能的设置
步骤 1. 在 Report Studio 中创建并保存概要报表和细节报表。见图 22.
图 22. 创建概要报表和细节报表
步骤 2. 在 Report Studio 中打开概要报表。概要报表显示各个部门人数的信息。
步骤 3. 选中概要报表需要钻取的位置。如,部门维度。见图 23。
步骤 4. 点击页面左下角的属性的 Drill-Through Definitions 一项,打开穿透钻取编辑窗口。见图 23。
图 23. 选中需要钻取的位置
步骤 5. 在弹出的钻取编辑窗口中,点击新建图标创建一个穿透钻取。见图 24。
图 24. 创建一个穿透钻取
步骤 6. 为穿透钻取重命名。我们将新建的穿透钻取重命名为 Employee List。见图 25。
图 25. 为穿透钻取重命名
步骤 7. 选择需要连接的细节报表。打开在第 1 步中创建的细节报表。见图 26。
图 26. 选择细节报表
步骤 8. 选择打开细节报表的格式。可选择的格式包括 HTML, PDF, Excel 等,如果选择 Default 选项则使用 HTML 格式打开细节报表。见图 27。
图 27. 选择打开细节报表的格式
步骤 9. 设置传递参数。点击参数下方的编辑图标,在弹出的参数编辑框中,会列出细节报表中的已经定义好的所有参数。选择需要从概要报表传递到细节报表的参数,如:部门。并且在 Value 一栏中指定将概要报表中的什么参数或者数据项的取值传递到细节报表的指定参数中。如:这里选择将概要报表中部门数据项的取值传递到细节报表的部门参数中。见图 28。关于穿透钻取中参数传递的更多内容请见上一节。
图 28. 设置传递参数
钻取过程中参数的传递
所有在细节报表中定义的过滤器和参数,都会出现在穿透钻取参数的编辑窗口中,见图 28。我们在细节报表中定义了三个显式的过滤器以及一个隐式的参数。定义隐式参数的目的是既希望通过该参数完成概要报表到细节报表的参数传递,又不希望将该参数作为过滤器暴露在细节报表中供用户使用。如:我们希望当用户从概要报表的部门维度上进行穿透钻取操作的时候,在细节报表中显示被选中部门的所有员工信息,因此我们在细节报表中定义了部门的参数,通过这个参数在概要报表和细节报表之间传递被选中部门的信息;同时,我们并不希望用户在细节报表中看到并且使用这个参数,此时,我们就可以通过修改参数的属性,将其掩藏。见图 29。
图 29. 修改过滤器的显示属性
在穿透钻取参数编辑窗口中,可以选择将概要报表中两种类型的值传递给细节报表。一种是概要报表中参数的当前值,一种是概要报表中数据项的当前值。见图 30 中方法(Method)一列的下拉菜单选项。当然,也可以选择不传递任何参数,既在穿透钻取中不使用该参数。
图 30. 选择参数传递方法
对应不同的 Method 选项,会有不同的值出现在 Value 一列的下拉菜单中。见图 31。如果选择传递参数的当前值,则概要报表中所有的可用参数都会出现在 Value 的下拉菜单中;如果选择传递数据项的当前值,则概要报表中所有的可用数据项都会出现在 Value 的下拉菜单中。这里我们选择将概要报表部门数据项的当前值传递到细节报表的部门参数中。
图 31. 不同传递方法的参数取值
总结
综上所述,Cognos 商业智能系列软件不仅可以提供丰富的报表展示功能,基于条件生成动态报表,而且可以通过钻取操作将不同的报表关联起来,用户可以通过一个报表的信息关联查看其它相关报表的信息,从而以最快的速度找到相应的解决办法,避免了在不同的信息单元中进行无目的的切换。