簡述以Cognos開發視角說資料倉儲設計
Cognos8.3 Report Studio設計企業級分析報表已經滿足大部分企業報表需求,但不能真正滿足中國式特殊財務報表。基於工具本身特點,資料邏輯規劃來看,對不符合資料結構性的手工報表很難一次性整合大的指令碼實現。很多設計過類似報表的開發人員,會用一貫的設計思路,在資料集市層整合所有資料來源,利用Cognos工具簡單取數,這種方式很好,但不靈活,每次需求變更就會改動過程與視圖。對於高度集中企業資料嚴格保密的環境下,不是你想去資料庫改改過程,調整程式。我的建議是根據現有開發設計環境思考一個問題,哪種解決辦法最有效,最快捷能體現需求變更,前端應用調整相應及時。
商業BI系統中,設計的目標不是為核心業務系統的做業務報表,也不是給其他系統提供即時資料查詢平台。如果理解成報表系統、資料大集中系統,或者類似於運營資料共用平台(ODS),這對設計EDW思路相違背,導致系統設計走上末路,不到兩三年系統運營支撐相當難。合理的設計規劃,有利二次開發與升級,降低IT運營成本,對往後系統二期、三期改造降低風險與開發週期。而這些設計跟前端報表有什麼關係,我明確指出一點:需求調研、系統設計、模型規劃、ETL倒換等後台設計處處都影響前端開發,前端是使用者最直接最快捷反映系統運行能力與資料準確性。對設計前端人員需要瞭解更多需求,配合需求人員調研,結合當前系統使用的工具,以及應用開發架構等因素,規範報表格式,統一各業務部門需求指標,針對特殊報表或者財務上報資料另行討論。
實施動態列固定行月季年組合式報表方案
什麼是動態列固定行報表,動態列固定行報表是我自己提出的一種新說法,相信大家對平面報表的列表很清楚吧,列表就簡單的固定列動態行報表。動態列是不固定的列成員,在一段時間裡,列是根據業務資料動態響應,聯動關聯基礎維度資訊。固定行是橫向觀察,每行對應動態多個列,展現一個完整的記錄資訊。讓我們瞭解一下動態列固定行年月季組合報表樣式:
報表展現要求:日期列必須全部顯示,沒有值預設是“0”或者“/ ”,按日期月份選擇,如:選擇5月份,除6~12月份、三四季度、下半年為空白,,其他月份、季度、年必須有值。
邏輯設計思路
方法一:在資料集市層整合報表格式的資料,季度、年、全年在表資料體系,定義一個月季年維度,識別欄位包含12月、四個季度、上下半年、全年。在資料執行個體層,統計日期與剛剛定義的月季年維度存在一個N:1的關係。
方法二:利用Cognos工具的特點,利用多個子查詢UNION、JOIN組合實現,單獨對季度、年、全年計算。而資料集市層不需要對事實表做處理,但做一個月季年維度視圖。
利用方法二執行個體操作:
我比較贊成第二種方法,後台資料處理少,視圖調整方便。子查詢處理容易理解,圖形介面友好,查錯糾正易定位。
報表用的查詢有:日期查詢,客戶統計分析_ALL。
詳細設計圖如下,各查詢事先定義好,約束條件都捆綁在事實資料中。
日期查詢與客戶分析查詢是通過外關聯組合,運算式如下:
[客戶分析查詢].[CAL_MON_NUM] = [日期_查詢].[CAL_MON_NUM]
客戶分析查詢中,關聯欄位CAL_MON_NUM是從自訂的月季年維度資料表取12個月編碼,季度、上下半年、全年是基於12個月組合判斷得到。
如下:
--季度
[客戶分析查詢].[CAL_MON_NUM]
case
when ([客服報表分析].[V_D_CAL_MON_ALL].[CAL_MON_NUM] in (1,2,3) ) then (13)
when ([客服報表分析].[V_D_CAL_MON_ALL].[CAL_MON_NUM] in (4,5,6) ) then (14)
when ([客服報表分析].[V_D_CAL_MON_ALL].[CAL_MON_NUM] in (7,8,9) ) then (15)
when ([客服報表分析].[V_D_CAL_MON_ALL].[CAL_MON_NUM] in (10,11,12) ) then (16)
end
[客戶分析查詢].[CAL_MON_NM_1]
case when ([CAL_MON_NUM]=13) then ('一季度')
when ([CAL_MON_NUM]=14) then ('二季度')
when ([CAL_MON_NUM]=15) then ('三季度')
when ([CAL_MON_NUM]=16) then ('四季度')
end
上下半年、全年方式同季度查詢,並集月份、季度、半年、全年四個字查詢。
日期查詢也類似方法,得到的結果如下:
頁面設計就根據自己報表的樣式調整,但這類報表必須選擇“交叉表”控制項,因為列是動態,以後資料庫存在就顯示,不存在就不顯示。對於管理機構層,不確定因素,以後會發展潛在地區的分公司,就給予動態產生。
設計後,大概結果如下,因資料庫只有12月測試資料。
總結:報表開發沒有固定設計模式,不同需求,根據需求確定。雖然樣式基本相似,在設計模型上要考慮前後端,報表控制項選擇,子查詢組合等。