昨天接到一個需求,需要在某個報表中把一個公司的下屬公司數據匯總到母公司中顯示,而下屬公司不再在報表中展示。假設母公司叫“義務毛巾廠”,三個子公司分別叫“義務毛巾廠北京分廠”、“義務毛巾廠上海分廠”、“義務毛巾廠廣州分廠”,那么報表中只需要看到“義務毛巾廠”,且其數據包含下屬三個分公司的數據。
由于只是針對這一個特例來匯總數據,其他同級的公司還都照常顯示所有的母公司與子公司,所以不能通過邏輯級別來做全局匯總。最后只能想到用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