Report Studio基本概念四、在过滤中使用IF THEN ELSE语句(implementing IF THEN ELSE )

浏览: 1945

企业主想查看不同订单方式的销售数量。除此之外,对“Sales Visit”订单方式来说,他们还希望报表可以提供一个可以灵活选择零售商的功能。

因此,报表应该按照订单方式展现销售数量。对于除了“Sales Visit”所有其他订单方式来说,报表需要展现出所有的零售商;对于“Sales Visit”这个方式,报表需要可以按照选定的零售商进行过滤。

 

准备工作

 

使用Order Method | Order Method  Sales Fact | Sales Quantity作为列创建一个简单的列表。对order method进行分组,并且设置quantityaggregationTOTAL

 

如何实施

 

1. 这里我们仅仅需要在Order Method为“Sales Visit”时对retailer进行过滤,所以,我们从添加一个新的detail filter开始。

2. 定义此filter为:

if ([Order method]='Sales visit') then ([Sales (query)].[Retailer site].[Retailer name] = ?SalesVisitRetailer?)

3. 验证报表。你会看到多个错误信息。

4. 修改filter定义为:(([Order method]='Sales visit') and ([Sales (query)].[Retailer site].[Retailer name] = ?SalesVisitRetailer?)) or ([Order method]<>'Sales visit')

5.验证报表,这次会成功。

6. 运行并测试报表。

 

工作原理

 

当使用在数据表达式中的时候,IF THEN ELSE语句工作正常。然而,当我们把它使用在filter中的时候,Cognos经常会返回错误。IF THEN ELSE 是一个有效的语法结构,并且在表达式窗口是可以解析并验证通过的。这确实有点奇怪。

解决这个问题的变通的方法是使用此示例中的AND…OR语句。IF条件和相应动作语句用AND语句联接起来;ELSE部分使用OR运算符执行相反的条件(在此示例中为:Method <> 'Sales Visit')。

 

更多

 

其实没有必要一直使用AND…OR子句。此示例中的过滤表达式也可以写成这样:

([Sales (query)].[Retailer site].[Retailer name] = ?SalesVisitRetailer?) or ([Order method]<>'Sales visit')

视需求不同,你可以单独使用AND,单独使用OR,或者把他们联合在一起使用。只需要确定包含所有的可能性就行。

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

0 个评论

要回复文章请先登录注册