2009-06-23 52 views
11

我有一個相當標準的OLTP歸一化數據庫,我意識到我需要在數據的不同維度上做一些複雜的查詢,平均值和標準偏差。從關係OLTP數據庫到OLAP多維數據集的最佳方法是什麼?

所以我轉向了SSAS和創建OLAP多維數據集。

但是,爲了創建立方體,我相信我的數據源結構需要處於'明星'或'雪花'配置(我認爲它現在不是這樣)。

是使用SSIS在我的主OLTP DB上將某種ETL過程轉換爲另一個具有事實和維度的正確「星形」配置的關係數據庫的正常過程,然後使用此數據庫作爲數據源OLAP多維數據集?

謝謝

回答

8

是的,這是基本的想法。您將高度正常化的OLTP數據庫解規格化爲立方體,以便對數據進行切片和切塊,然後在其上呈現報告。邏輯設計技術被稱爲維度建模。關於dimensional modeling有很多關於Kimball Group的大量信息。 Ralph Kimball的books on the subject也非常出色。如果您想了解更多關於BI工具的信息,請查看關於SSIS,分析服務等的virtual labs

5

答案是:是的,但是。

SSAS中的維度具有屬性之間的關係,可以使用一系列字段來過濾切片。這些關係可以是分層的(一個以上的級別 - 一個屬性可以有父級和子級),您也可以建立下鑽路徑(稱爲SSAS中的層級),其行爲類似於屬性,但具有嚮導式向下鑽取的功能。要做到這一點,你需要在數據庫中擁有嚴格等級關係的可用密鑰(即密鑰不能有模糊關係,在這種關係中,一個孩子可以有多個父親)注意,這不是整個故事,但它現在已經足夠接近現實

這些層次結構可以由系統從平面數據結構構建,也可以通過雪花呈現,並在底層數據源視圖中標記關係(DSV是立方體元數據的一部分並可以用於以類似於數據庫視圖的方式按摩數據)。

雪花是一種3NF-ish模式(它不一定是3NF--你可以在實踐中將它的部分弄平)只有1:M的關係。 SSAS可以支持其他一些維度結構,如父 - 子(與遞歸自連接的親子關係)和M:M維(M:M關係 - 正是它們聽起來像的)。這種類型的尺寸更加繁瑣,但可能對您有用。

如果您的源數據中的鍵可以具有與雪花等效的數據語義,那麼您可以通過源系統上的一系列數據庫視圖來填充您的多維數據集,這些數據庫視圖以足夠的雪花形式呈現基礎數據,像用於多維數據集維度的格式(我實際上已經做了幾次)。大量使用合成鍵的模式更適合於此。

如果您的供應商或其他方不允許您將視圖添加到源數據庫,則可以改爲使用數據源視圖。 DSV可以具有名爲「命名查詢」的虛擬表,這些虛擬表通過數據庫查詢填充。

事實表加入維度。在SSAS2005 +中,您可以在一個維度內的不同晶粒上加入不同的事實表。我通常不會在數據倉庫中使用這些功能,但如果您嘗試使用源數據而無需過度按摩它,則此功能可能非常有用。

如果這不起作用,那麼您可能必須編寫一個ETL過程來填充星形或雪花模式。

幾個附加條件:

  1. 立方體,可向在實時模式,他們只是發出一個查詢到底層數據運行。這會對您的源數據造成一些效率低下的風險,所以除非您確信自己知道自己在做什麼,否則不建議這樣做。

  2. 對於(i)的適用情況,您可能無法將多維數據集用作應用程序屏幕的數據源。如果您需要計算用戶希望在屏幕上看到的東西的平均值,則可能必須在屏幕後面的存儲過程中計算它的平均值。

  3. 如果您這樣做,請設置一個複製數據庫並將其關閉。定期刷新此數據庫,以便您的ETL過程可以從內部一致的數據集運行。如果您從實時數據庫運行,那麼稍後會填充一些項目,這些項目取決於相應流程運行後創建的記錄。

    您可能會遇到運行維度加載,然後將新數據輸入到系統中的情況。事實表加載運行時,它現在包含依賴於尚未加載的維度數據的數據。這會破壞立方體並導致加載過程失敗。批量刷新複製的數據庫以運行ETL或加載關閉的多維數據集將緩解此問題。

    如果您沒有複製數據庫的選項,則可以爲丟失的數據設置更多冗餘策略。

  4. 如果您的基礎生產數據存在重大的數據質量問題,它們將反映在立方體中。 GIGO。

相關問題