2012-08-03 38 views
0

可以將維度ID記錄也用作列(屬性)嗎?我不知道這是否會起作用,或者如果我反對最佳做法。這裏有一個更詳細的解釋,爲什麼我問這個,我在找什麼: 我有一個只有6條記錄的維度,稱爲過期到期維度。 它看起來像如下:可以將維度ID記錄也用作列(屬性)嗎?

PastDueBandDimID  PastDueMin  PastDueMax  PastDueDesc 
    _____________________________________________________________________ 
    1     0    0    Current 
    _____________________________________________________________________ 
    2     1    29    1-29 Days Past Due 

而且它去與30-59天/ 60 - 89天/ 90-180天。 這種模式一切工作正常,但我想用這些數據創建一個用戶層次結構,所以我可以用不同的方式對它進行分組。所以我想要做的是在DSV中創建其他字段,稱爲1-29/30-59 ....並在這些字段中引用DimID,這樣我就可以創建我的層次結構。我不覺得這是做這件事的好方法,但我沒有其他想法。任何建議表示讚賞!我想將0-59天和60-180天的報告分組(不是全部,但部分),而用戶層次結構將使用戶能夠做到這一點。

回答

2

當我們這樣做時,我幾乎總是在聚合的事實上創建物理桶列,而不是「過期」維度。

我可以理解這樣構建這個維度的誘惑,因爲它非常「靈活」,但是當你發現它使得使用自動化工具(比如ssas)更加困難,並且迫使你不斷更新你的事實以反映新的「過期」維度價值。

相反,爲什麼不建立一個位於事實之上的聚合,並且每天都進行重建(甚至是一個視圖,如果數據庫足夠強大的話)。使用發票爲例:

Invoice 
Invoice Due Date 
PastDueLTE29 (1 if <= 29, 0 otherwise) 
PastDue30to59 (1 if >= 30 and <= 59, 0 otherwise) 
PastDue60to89 (1 if >= 60 and <= 89, 0 otherwise) 
PastDue90to180 (1 if >= 90 and <= 179, 0 otherwise) 
PastDueGTE180 (1 if >= 180, 0 otherwise) 

然後,如果您想小組,說所有的發票<60天逾期,你只是過濾情形之一的前兩列的= 1

如果您真的想要一個層次結構,難道你不能只添加幾列到你的表?

我真的不喜歡使用的列名「級別」 ......但是:

PastDueBandDimID 
PastDueLevel1Name ("Past Due" or "Current") 
PastDueLevel2Name ("1-60" or "61-180" or "180+") 
PastDueLevel3Name ("1-30", "31-60", "61-90", "90+" 
PastDueLevel3Min 
PastDueLevel3Max 
+0

謝謝!我會試試這些建議 – John 2012-08-03 15:45:20

相關問題