2016-07-28 49 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