OBIEE 在分析中汇总数据到上级单位

昨天接到一个需求,需要在某个报表中把一个公司的下属公司数据汇总到母公司中显示,而下属公司不再在报表中展示。假设母公司叫“义务毛巾厂”,三个子公司分别叫“义务毛巾厂北京分厂”、“义务毛巾厂上海分厂”、“义务毛巾厂广州分厂”,那么报表中只需要看到“义务毛巾厂”,且其数据包含下属三个分公司的数据。

由于只是针对这一个特例来汇总数据,其他同级的公司还都照常显示所有的母公司与子公司,所以不能通过逻辑级别来做全局汇总。最后只能想到用CASE WHEN语句来实现。

1. 在分析中编写列公式
CASE "公司维"."公司名称" 
    WHEN "义务毛巾厂" THEN "义务毛巾厂北京分厂"
    WHEN "义务毛巾厂" THEN "义务毛巾厂上海分厂"
    WHEN "义务毛巾厂" THEN "义务毛巾厂广州分厂"
    WHEN "威海咸鱼公司" THEN "威海咸鱼公司"
    WHEN "台北章鱼须公司" THEN "台北章鱼须公司"
    ···
END

这样写了一长串CASE WHEN终于实现了功能,虽然后期维护有些麻烦,但好在公司组织维度不会经常变动。

2. 将上面这个列创建为提示过滤器
创建提示.png
3. 创建仪表盘提示

提示中的公式也和上面一样。

4. 在下钻表中也修改列公式和提示过滤器

如果主表有下钻表(通过操作链接跳过去那种,不是通过逻辑维下钻的),那么直接在下钻表中和上面
1、2 步一样修改列公式和提示筛选器,保存后执行报表,发现下钻表也能如预期一样的汇总!


后记

以前也遇到过类似情况,当时一个同事说必须创建表示变量才行,其实没有必要的,我们仔细想一想,CASE WHEN 之后数据就自动被汇总了,不需要表示变量这个媒介。
另外,找了半天,好像 dashboard 函数中没有类似 Oracle 数据库中 DECODE() 的函数,但我们可以把上面的 CASE WHEN 语句改造如下,使之和 DECODE() 一样简洁:

CASE 
    WHEN "公司维"."公司名称" IN ('义务毛巾厂', '义务毛巾厂北京分厂', '义务毛巾厂上海分厂', '义务毛巾厂广州分厂') 
        THEN '义务毛巾厂'
    ELSE "公司维"."公司名称"
END

推荐阅读更多精彩内容