Report Studio之编辑XML文件三、一个隐藏在XML中的属性——行级别的格式

浏览: 3349

我们知道,一个Cognos报表就是一个XML定义。当我们在Report Studio中创建或者更新一张报表,相应的报表规格文件的XML标签被加入或者修改。但是有一些属性或者对象,他们在Report Studio中是不可见的。我们可以直接在报表的XML文件中,添加或者修改那些不可见的属性或者对象。

在此例中,我们将一起研究如何在XML文件中定义交叉表的行级别格式。

假定有一张在列上拥有若干度量的交叉表。用户希望高亮单价大于25的产品所在行。不在每列上应用条件样式,此例,我们将直接修改XML定义行级别的格式。

 

准备工作…

 

创建一张以product name作为行,数个度量作为列的交叉表。如下图所示:

 

如何实施…

 

1. 定义一个Boolean类型的条件 变量用来识别单价大于25的产品(这将在报表中高亮显示)。

将此变量命名为Is_Costly.

2. 选中Quantity所在列,设置Is_Costly作为其样式变量。为变量条件(Yes和No)设置合适的样式。关于设置的方式,我们已经在前面的博文中讨论过了。

3. 复制报表到剪贴板,然后粘贴到XML编辑器中。这里我们使用Visual Studio。

4. 搜索<conditionalStyle>标签。我们会在Quantity数据项下发现此标签。

5. 从<conditionalStyles>到</conditionalStyles>,复制整个元素。

6. 现在找到<crosstabRows>元素。我们可以看到其拥有一个为product name定义的<crosstabNodeMember>子元素。

7. 使用如下代码替换空标签<factCell/>

<factCell>

</factCell>

8. 粘贴第5步中复制的<conditionalStyles>标签到<factCell>元素中。这时代码看起来如下:

 

9. 复制整个XML文档到剪贴板,并在Report Studio中打开。

10.运行并测试报表。

 

工作原理…

 

在Report Studio中,没有明示的功能可以选择和编辑交叉表的整行。因此,如果我们想应用任何行级别的格式,我们需要重复对每一列做操作。

然而,如果我们检查报表的XML文件,在<crosstabRows>元素下有一个<factCells/>元素(在高版本的Cognos中,可能无此元素,并且代码格式也不尽相同。但是不影响操作)。这里我们重写此元素,定义我们自己的样式,并应用到此行对应的所有交叉表度量单元格。

我们没有手动写整个的条件样式代码,我们先在一列(Quantity)上应用条件样式,然后复制条件样式代码到<crosstabRows>下的<factCell>标签内。这样,就把条件样式应用到整行上了。

 

更多…

 

此例使用的技巧可以节省开发时间。我们不要在每一列上应用格式。如果在以后的维护工作中需要对格式进行修改,这同样可以节省时间。同样的原理,当行上有多个成员时,我们也可以在<crosstabColumns>标签上应用格式以达到修改整个列的样式的效果。

推荐 0
本文由 zhengyi1943 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册