我最近在SQL Server 2008分析服務多維數據集中遇到了一個問題。想象一下,你有一個簡單的銷售數據倉庫,有訂單和產品。每個訂單可以與幾個產品相關聯,每個產品可以包含在幾個訂單中。因此,數據倉庫至少由三個表組成:一個用於產品,一個用於訂單,一個用於參考表,用於建立兩者之間的n:n關係。 我希望我們的立方體回答的問題是:有多少訂單同時包含產品x和產品y? 在SQL中,這是很容易:MDX中的交叉點
select orderid from dbo.OrderRefProduct
where ProductID = 1
intersect
select orderid from dbo.OrderRefProduct
where ProductID = 3
因爲我在SQL相當精通,但在MDX一個新手,我一直無法實現,在MDX。我已經嘗試使用不同的計數度量,MDX函數intersect
和nonempty
以及subcubes。我也嘗試在邏輯上覆制維度(通過將維度添加到多維數據集兩次)以及物理上(通過複製數據源表和維度)。
在http://www.zeitz.net/thts/intersection.zip上,您可以下載一個25kB大小的zip文件,其中包含一個帶有一些測試數據的SQL腳本以及使用這些表的Analysis Services解決方案。
我們正在使用SQL Server 2008 R2及其Analysis Services對象。性能考慮並不重要,因爲數據量與該立方體中包含的其他度量值(數十億行)相比數據量相當低(數百萬行)。
最終目標是能夠在標準OLAP中使用所需的功能(自定義計算的度量都可以),因爲Excel是我們的主要前端,我們的客戶希望從維度列表中選擇他們的產品並獲得立方體度量的正確結果。但即使是獨立工作的MDX-Query也會大有幫助。
謝謝!
編輯3月12日 我錯過了什麼或不能解決這個問題嗎?
如果它有助於構建mdx,下面是使用subquerys在sql中獲得結果的另一種方法。它可以進一步嵌套。
select distinct b.orderid from
(
select distinct orderid from dbo.OrderRefProduct
where ProductID = 1
) a
join dbo.OrderRefProduct b on (a.orderid = b.orderid)
where ProductID = 3
我在mdx中嘗試了類似於subcubes的東西,但沒有成功。
它的工作原理!太棒了。給我一兩天來完全理解你實際做了什麼:-D – 2013-03-12 12:52:51
有一個小問題:我設法擴展解決方案,以便使用3個產品維度(其中2個交叉引用,就像你一樣),這個完美的作品。現在,當用戶(並且我們確實有這種類型的用戶)選擇交叉引用維度product2和product3中的產品,但保留主產品 - dimnension product1時,結果是錯誤的。在這種情況下,我們可以使用多維數據集計算來強制輸出null,但有沒有辦法使它正確計算?如有必要,我可以爲這種情況提供解決方案+ excel文件。 – 2013-03-13 10:34:44
在「維用途」選項卡上,常規關係應僅存在於一個交叉引用事實和維度對中,即您不應該在交叉引用事實和維度的同一列或行中具有多個常規關係。 – 2013-03-14 02:17:10