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

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.

主站蜘蛛池模板: 西丰县| 图片| 东源县| 临洮县| 凌云县| 信阳市| 汉川市| 财经| 云浮市| 建湖县| 卓资县| 城口县| 枣强县| 安仁县| 仲巴县| 禹城市| 安国市| 舒兰市| 榆树市| 礼泉县| 沙坪坝区| 安阳市| 罗田县| 莱阳市| 公主岭市| 潮州市| 海林市| 洮南市| 友谊县| 青铜峡市| 佛山市| 中牟县| 新泰市| 德令哈市| 全州县| 莫力| 广饶县| 灵台县| 贵定县| 六枝特区| 宁城县|