企业主想查看不同订单方式的销售数量。除此之外,对“Sales Visit”订单方式来说,他们还希望报表可以提供一个可以灵活选择零售商的功能。
因此,报表应该按照订单方式展现销售数量。对于除了“Sales Visit”所有其他订单方式来说,报表需要展现出所有的零售商;对于“Sales Visit”这个方式,报表需要可以按照选定的零售商进行过滤。
准备工作…
使用Order Method | Order Method 和 Sales Fact | Sales Quantity作为列创建一个简单的列表。对order method进行分组,并且设置quantity的aggregation为TOTAL。
如何实施…
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,或者把他们联合在一起使用。只需要确定包含所有的可能性就行。