2014-04-10 29 views
0

我有一個事實表,其中有2列對應於維度Dim1,Dim2。 在同一張表中,我有4個其他列Value_Type(int),INT_VALUE(int),FLOAT_VALUE(float),TEXT_VALUE(string)。 有許多,它們由VALUE_TYPE鑑定,並根據其性質可在3列之一被寫入措施(INT_VALUE(INT),FLOAT_VALUE(浮動),TEXT_VALUE(串)) 假設措施1與Measure_Type = 1是年齡,2是帳戶餘額,3是清晰的名稱。 可能有其他度量類型使用這3列相同的數據。 因此,樣本事實表看起來像這樣在MDX中使用事實表中的相同列構造MDX中的計算度量

Dim1 Dim2 Measure_Type  INT_VALUE  FLOAT_VALUE TEXT_VALUE 
10  10  1     25   
10  10  2         2000,34 
10  10  3            John 
10  20  1     28   
10  20  2         3490,23 
10  20  3            Frank 

我的任務是寫每個DIM1,DIM2組合,返回同一行中的所有3項措施MDX查詢。 這個想法是爲每個從右側字段返回值的度量構造一個計算成員。 例如,對於Measure1,我們採用measure_type = 1的INT_VALUE。 問題是我不知道如何構建這些計算所得成員的MDX查詢。 你能幫我嗎?

所以我的最終目標是編寫MDX查詢返回的所有措施中,每一列都設置DIM1的,DIM2

SELECT [Measure1], [Measure2], [Measure3] ON COLUMNS, 
NON EMPTY [Dim1].[Dim1].[Dim1].Members*[Dim2].[Dim2].[Dim2].Members ON ROWS 
FROM [Cube] 

Dim1 Dim2 Measure1 Measure2 Measure3 
10  10  25   2000,34  John 
10  20  28   3490,23  Frank 
+0

字符串不能被聚合。如果你不在選擇的最底層,你想爲Measure3展示什麼? – FrankPl

+0

我需要measure_type = 3的文本值。顯然有一個連接文本值的函數。 – kosmipt

+0

連接字符串因爲聚合在Analysis Services中不可用。 – FrankPl

回答

1

隨着花車和整數正好可以總結,我不認爲有Measure1Measure2的任何特殊需要。假設你樣本表中的空字段是null s,你甚至不需要任何東西的measure_type列,因爲跨空值的總和很好,即通過將不同度量類型的三條記錄合併爲一個,並且省略null值,可以將事實表摺疊爲其大小的三分之一。

因此,我們留下了字符串值的聚合。由於字符串不能用作物理量度,因此我們必須將該列放在屬性中,並將聚合實施爲計算量度。要執行此操作,您可以按以下步驟操作:

  • 使用數字主鍵列和文本值列中的不同值創建維表。對於dim1和dim2的組合沒有text_value的情況,我建議在此表中添加一個帶有特殊文本的記錄,如'<n/a>'。在Analysis Services中避免空屬性值和空外鍵通常是一個好主意。
  • 將外鍵添加到引用此維的每個記錄的事實表中。
  • 在BIDS,創建維度,我們將其命名爲text,我假設屬性稱爲text value。在多維數據集編輯器中設置度量值組和維度之間的引用。
  • 定義計算度量爲Measure3以下表達式:

Generate((EXISTING [text].[text value].[text value].members) 
        - { [text].[text value].[<n/a>] } 
      as a, 
      a.Current.Name, 
      ', ' 
     ) 
  • 製作的維度或屬性不可見。

當然,您不需要在物理表中創建維表和外鍵。您也可以在數據源視圖中將它們生成爲視圖或命名查詢。

而且您可以使用與我使用的逗號和空格不同的分隔符,這是Generate MDX function的第三個參數。