用户想要查看product lines,products和相应的unit cost。对于每个product,他们还想查看上一年的销售趋势。
我们需要使用要求的信息创建一张列表,并且嵌套入一个折线型图表用来显示销售趋势。
准备工作…
使用Sales (query)名空间下的Product | Product line, Product | Product name 和 Sales fact | Unit cost作为列表的列创建一张简单的列表。
如何实施…
1. 我们已经有了一张拥有要求字段的列表。请确定此列表已经应用了合适的排序和聚合。
2. 现在我们要添加一个嵌套的Chart对象来显示每个product的趋势。
3. 从Insertable Objects窗体中拖拽一个Chart对象到报表中最为列表的一个列。
4. 选择一个合适的chart类型。此例中,我们选择“Line with Markers”。
5. 从Source窗体中,拖拽Sales fact | Quantity到chart上作为Default measure。拖拽Time dimension| Month key到Category之中,Product | Product name到Series之中。
6. 点击图表的任意位置,然后从菜单栏选择Data | Master Detail Relationship。
7. 创建一个新的link,并把两个查询中的Product name项连接起来。
8. 点击OK返回到Report Page。
9. 选中图表的Y1 Axis,更改其Use Same Range for All Instances属性为No。
10. 点击图表,然后点击工具栏中的Filter按钮。
11. 在Current Year上定义一个detailed filter。此例中,我们将把此filter硬编码为2004:
[Sales (query)].[Time dimension].[Current year]=2004
当然在实际实践中,我们更多的是在年份上进行动态多虑,而不是选择硬编码。
12. 运行并测试报表。如有需要,调整图表的属性(size, marker, color等)以获得更好的显示效果。
工作原理…
Cognos Report Studio允许一个报表对象被嵌套在另一个列表中。在上一个创建分段的示例中,我们看到了Report Studio自动创建了嵌套。而在此示例中,为了实现更好的控制,我们手动创建了嵌套。
主要/明细关系(Master Detail relationship)
我们需要在以下场景中定义此关系:
1. 当外报表对象和内报表对象使用不同的查询时;
2. 其他任何非‘列表嵌套列表’的场景。
为了生成报表,Cognos首先在数据库中执行主要查询检索数据;接着对每条返回的记录,使用在Master-Detail relationship中定义的过滤执行明细查询。
因此,明细查询被执行了多次,每次使用不用的过滤条件。
因为每次只需要检索很少的数据,所以输出的页面很快就能返回到客户端。
更多…
通过在嵌套中使用不同的查询,我们可以对检索什么数据有更多的控制。在此例中,我们想显示一年的销售趋势—我们已经硬编码其为2004。因此,图表查询需要在year上做过滤。然而,外查询并没有应用此过滤。我们可以看到输出的报表中,有些行没有返回有效的图表。例如,Personal Accessories | Auto Pilot行。这意味着在2004年此产品无销售。
对于交叉表,我们可以很方便的通过右击列的表头,然后点击“插入列数据的图表”的方式为交叉表表头添加图表。如果想要在交叉表空间中添加图表,那么首先需要首先插入一个交叉表空间,然后定义新添加的交叉表空间的“定义内容”属性为“是”,接着向表空间中添加图表,并设置合适的主要/明细关系。