在企業的數位轉型過程中,資料儀表板早已成為管理階層決策的重要依據。在所有資料指標中,同期比較與累計無疑是最常出現、也是管理階層最關心的核心指標。前者反映企業的成長速度(年增幅),後者則呈現企業的進度(目標達成情況)。
同期與累計指標的常見問題
在實際的資料分析中,經常會遇到以下問題:
計算同期指標時:某款熱銷商品因季節性缺貨,今年 1 月銷量突然歸零。但在同期比較的儀表板上,它不僅沒有顯示較去年同期下降 100%,反而直接從清單中消失。
計算累計指標時:部分門市因颱風或其他因素臨時停業,連續幾天沒有營業交易紀錄。照理來說,先前的銷售額已經累計下來,但當管理階層在儀表板上篩選到停業期間時,年度累計銷售額不但沒有延續先前的歷史業績,反而顯示為 0,造成資料中斷。
這些看似難以理解的現象,通常不是前端視覺化軟體發生 Bug,而是資料開發人員在撰寫 ETL 程式時,落入了一個隱性陷阱——稀疏資料造成的維度遺失。
問題產生的原因
在資料倉儲建置中,常見做法是直接以事實表(交易明細表)進行關聯或時間視窗計算。但在實際業務情境中,交易資料在日期/產品等維度上往往並不連續——如果某項商品或某家門市當天沒有交易,交易明細表中就不會出現該日紀錄。這項特性容易造成指標失真。
同期資料憑空消失:假設某商品去年 1 月銷售 100 萬元,今年 1 月因缺貨銷量為 0。由於今年的交易明細表中沒有該商品紀錄,如果直接以今年資料去關聯去年資料,這項商品就會從同期比較儀表板中消失,無法呈現較去年同期下滑 100% 的實際警示。
累計資料在特定日期中斷:累計指標需要連續的時間軸。如果某門市因颱風停業數日、期間沒有交易資料,一旦管理者在儀表板上篩選到這幾天,該門市的累計銷售額就可能顯示為空值或 0,無法延續並呈現先前已累積的歷史業績。

解決問題的策略
較完整的資料倉儲設計有一項重要原則:先建立穩定且連續的時間維度表,再補入交易資料。換句話說,在計算時間型指標之前,必須先在底層建立一個完整、連續的時間座標網格。
建立全維度時間維度表:擷取歷史完整維度,與標準日期表進行交叉連接(CROSS JOIN)。這相當於在資料倉儲中建立一套清楚的時間網格,確保每項商品或每家門市在每天的時間座標上,都有固定的位置。
以維度表 LEFT JOIN 交易資料並補 0:以連續的時間維度表作為主表,LEFT JOIN 實際交易明細表。針對銷量為 0 或停業的日期,可利用 COALESCE(fact.amount, 0) 進行零值補齊。
透過這樣的處理,即使商品當天沒有銷量、門市當天沒有營業,也能在連續的時間軸上保留對應數值,進而確保儀表板能正確呈現同期比較與累計結果。
策略的後續優化
如果將所有歷史維度都與時間進行完整關聯,面對每日數億筆、數 TB 等級的大量資料,是否會造成資料量暴增,甚至讓伺服器運算資源不堪負荷?
這正是考驗資料工程師實務落地能力的關鍵。在正式環境中,通常可透過以下兩種方式降低計算壓力:
活躍維度動態剪枝:ETL 程式可依據業務生命週期,動態排除已完全下架,或近幾年皆無任何活動的停用維度,從源頭精簡全維度資料量,避免產生不必要的笛卡兒積。
增量網格迭代合併:針對累計計算,可採用「今日累計=昨日累計+今日增量」的方式,將全維度補齊的壓力分散至每日增量作業中,避免重複計算歷史資料,進而有效控制運算成本。

結語
如果資料儀表板因商品缺貨或門市停業就頻繁出現資料中斷、指標失真,不僅無法協助決策,甚至可能誤導經營方向。因此,資料開發人員在撰寫 ETL 程式時,必須事先補強這類由稀疏資料所衍生的邏輯漏洞,確保企業核心資料資產的真實性與可信度。
