2014-11-04 179 views
0

我正在嘗試創建一個動態命名集,它可以用於使用日期維度對數據進行分片。我想有一個像昨天,過去7天,上個月,上個季度等幾個命名集合。對於「最後一天」的命名集合,我正在考慮做類似的事情。MDX:多維數據集計算上的動態命名集

StrToMember("[Date].[Calendar].[Day].&[" + DateAdd("d", -1,Tail([Date].[Calendar].[Day], 1) + "]") 

我想DateAdd("d", -1, Tail([Date].[Calendar].[Day], 1) + "]")返回member_value,這樣我可以建立uniquename字符串返回一個成員,這可能嗎?

我之所以使用DateAdd是因爲有時候我在Day級別的數據上有差距,所以使用previousmember有時會返回錯誤的數據。

Ps:我最後一天的意思並不等於功能Now()-1,它是多維數據集中可用的最後一天,這就是爲什麼我不能依賴服務器系統時間來實現這一點。

回答

0

希望這將讓你的最後一天:

WITH 
MEMBER [Date].[Calendar].[LastDay] AS 
Tail([Date].[Calendar].[Day]).ITEM(0).ITEM(0) 
SET [VariousDates] AS 
{[Date].[Calendar].[LastDay]} 
SELECT 
[VariousDates] ON 0 
FROM [MyCube] 

然後,您可以在設置[VariousDates]創造更多的成員:

WITH 
MEMBER [Date].[Calendar].[LastDay] AS 
Tail([Date].[Calendar].[Day]).ITEM(0).ITEM(0) 
MEMBER [Date].[Calendar].[Last7Days] AS 
AGGREGATE(
    Tail(
     [Date].[Calendar].[Day] 
     ,7 
    ) 
) 
SET [VariousDates] AS 
{ 
    [Date].[Calendar].[LastDay] 
    ,[Date].[Calendar].[Last7Days] 
    } 
SELECT 
[VariousDates] ON 0 
FROM [MyCube] 

(上面沒有測試過,但希望幫助)

+0

謝謝!我只想問關於ITEM()函數?你爲什麼使用它兩次? – ggarcia 2014-11-05 13:14:28

+0

Tail返回一組元組。第一個ITEM(0)然後返回該集合中的第一個元組。第二個ITEM(0)返回元組的第一個成員。我們然後保證會員,所以'會員'不會感到困惑。在這個例子中'TAIL'沒有使用第二個參數,所以只返回一個元組,所以你可能只用一個ITEM(0)就可以離開? – whytheq 2014-11-05 17:05:23