官术网_书友最值得收藏!

Implementing if-then-else in filters

Business owners want to see the sales quantity by order methods. However, for the Sales Visit type of order method, they want a facility to select the retailer.

Therefore, the report should show quantity by order methods. For the order methods other than Sales Visit, the report should consider all the retailers. For Sales Visit orders, it should filter on the selected retailer.

Getting ready

Create a simple list report with Order method / Order method type and Sales fact / Quantity as columns. Group by Order method to get one row per method and set the Aggregation for quantity to Total.

How to do it...

In this recipe, we need to create a filter that will be used to select the retailer if the Order method is Sales Visit. We will check what will happen if we use the if then else construction inside the filter and how to overcome any problems with the following steps:

  1. Here we need to apply the retailer filter only if Order method is Sales Visit. So, we start by adding a new detail filter.
  2. Define the filter as follows:
    if ([Order method type]='Sales visit') then ([Sales (query)].[Retailers].[Retailer name] = ?SalesVisitRetailer?).
  3. Validate the report. You will find multiple error messages.
  4. Now change the filter definition to:
    (([Order method type]='Sales visit') and ([Sales (query)].[Retailers].[Retailer name] = ?SalesVisitRetailer?)) or ([Order method type]<>'Sales visit').
  5. Validate the report and it should be successful.
  6. Run the report and test the data.

How it works...

The if else construct works fine when it is used in data expression. However, when we use it in a filter, Cognos often doesn't like it. It is strange because the filter is parsed and validated fine in the expression window and if else is a valid construct.

The workaround for this problem is to use and...or clauses as shown in this recipe. The if condition and corresponding action item are joined with the and clause. The else part is taken care of by the or operations with the reverse condition (in our example, Order Method <> 'Sales Visit').

There's more...

You need not use both and and or clauses all the time. The filtering in this example can also be achieved by this expression:

-([Sales (query)].[Retailers].[Retailer name] = ?SalesVisitRetailer?)

or

([Order method]<>'Sales visit')

Depending on the requirement, you need to use only or, only and, or the combination of and...or.

Make sure that you cover all the possibilities.

主站蜘蛛池模板: 都江堰市| 寿宁县| 英吉沙县| 志丹县| 六盘水市| 方城县| 伊吾县| 青州市| 宁河县| 竹山县| 奉节县| 泾源县| 建瓯市| 比如县| 论坛| 五常市| 湘潭县| 郎溪县| 巫山县| 鹤庆县| 布拖县| 铜山县| 信丰县| 上饶县| 安丘市| 上虞市| 黔西| 巴马| 宝鸡市| 上思县| 汶上县| 安阳县| 龙山县| 青州市| 宝坻区| 许昌县| 北川| 兴山县| 定结县| 华安县| 正安县|