2016-07-28 52 views
2

我有一個日期維度看起來像這樣[date].[date].[day].[yyyy-MM-dd],我想得到昨天的成員,即[date].[date].[day].[2016-07-27]。我怎樣才能做到這一點。IcCube - 獲取昨天的會員在MDX查詢

在約MDX一些線程,但不具體IcCube,它是這樣寫的:
1. STRTOMEMBER("[date].[date].[day].["+ FORMAT(NOW()-1,"yyyy-MM-dd") +"]")
2. STRTOMEMBER("[date].[date].[day].["+ VBAMDX.FORMAT(VBAMDX.NOW()-1,"yyyy-MM-dd") +"]")

第一溶液引發錯誤,說明「未知功能FORMAT」和誤差在第二個解決方案中,「VBAMDX.NOW()」期望有一個單一的參數「index」。如果我只用NOW替換VBAMDX.NOW,則同樣適用於VBAMDX.FORMAT。 但是所有解釋VBAMDX的頁面都有兩個FORMAT格式的參數,而現在沒有...

+0

檢查LookupByKey函數是一個更好的選擇 – ic3

回答

3

我想這是因爲不支持Excel FORMAT(錯誤報告已在最新版本的icCube中得到改進)。相反,我將使用功能mentionned在此page

StrToMember("[Time].[Calendar].[Day].&["+ DateToString(NOW()-1,"yyyy-MM-dd") +"]") 

但icCube你已經LookupByKey函數是一個更強大的解決方案,如果你的關鍵是一個日期:

LookupByKey([Time].[Calendar].[Day], Now()) 

或者如果你需要日期:

LookupByKey([Time].[Calendar].[Day], Today()) 

你可以使用func輕鬆導航日期(doc)。

希望有所幫助。

0

-1導致的錯誤NOW

所以也許下面的,刪除-1,並增加一個單一LAG,將工作?

STRTOMEMBER("[date].[date].[day].["+ VBAMDX.FORMAT(VBAMDX.NOW(),"yyyy-MM-dd") +"]").LAG(1) 

我只注意到你錯過了,在你的代碼,在成員名字的最後一節的方括號前面的符號,所以請嘗試以下之一:

STRTOMEMBER("[date].[date].[day].&["+ FORMAT(NOW()-1,"yyyy-MM-dd") +"]") 

STRTOMEMBER("[date].[date].[day].&["+ VBAMDX.FORMAT(VBAMDX.NOW()-1,"yyyy-MM-dd") +"]") 

如果你嘗試這三種措施是否都失敗了?

WITH 
    MEMBER [Measures].[Today1] AS 
    VBAMDX.NOW() 
    MEMBER [Measures].[Today2] AS 
    VBAMDX.NOW()-1 
    MEMBER [Measures].[Today3] AS 
    VBAMDX.FORMAT(VBAMDX.NOW()-1,"yyyy-MM-dd") 
... 
+0

仍然是相同的錯誤:「語法錯誤:隱式Item()函數調用(應用於:語法錯誤:隱式Item()函數調用(應用於:VBAMDX.NOW)期望一個單一(索引)參數:沒有參數。)期望一個單一(索引)參數:沒有參數。「 - 此外,如果今天的成員不存在,lag()不會幫助... – UlrichWuenstel

+0

@UlrichWuenstel我認爲你可能缺少代碼中的&符號 - 請參閱我的回答 – whytheq

+0

不幸的是,與問題無關。錯誤狀態,即VBAMDX的功能。NOW()需要一個參數,但我不知道,什麼。這似乎是一個IcCube固有的問題。 – UlrichWuenstel