IcCube - 在 MDX 查询中获取昨天的成员
IcCube - Get yesterday's Member in MDX Query
我有一个看起来像这样的日期维度 [date].[date].[day].[yyyy-MM-dd]
,我想要代表昨天的成员,即 [date].[date].[day].[2016-07-27]
。我怎样才能做到这一点。
在一些关于 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") +"]")
第一个解决方案抛出一个错误 'unknown function FORMAT',第二个解决方案中的错误是“"VBAMDX.NOW()" 需要一个参数 "index"”。如果我只用现在替换 VBAMDX.NOW,VBAMDX.FORMAT 也是如此。
但是所有解释 VBAMDX 的页面都有两个参数用于 FORMAT 和 none 用于 NOW...
是-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") +"]")
如果你尝试这 3 种措施,它们都会失败吗?
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")
...
我猜这是因为不支持Excel FORMAT(最新版本的icCube改进了错误报告)。相反,我会使用 page:
中提到的函数
StrToMember( "[Time].[Calendar].[Day].&["+ DateToString( NOW()-1,"yyyy-MM-dd") +"]")
但是在 icCube 中你有 LookupByKey 函数,如果你的键是日期,它是一个更强大的解决方案:
LookupByKey( [Time].[Calendar].[Day], Now() )
或者如果您需要约会:
LookupByKey( [Time].[Calendar].[Day], Today() )
您可以使用函数轻松导航日期 (doc)。
希望对您有所帮助。
我有一个看起来像这样的日期维度 [date].[date].[day].[yyyy-MM-dd]
,我想要代表昨天的成员,即 [date].[date].[day].[2016-07-27]
。我怎样才能做到这一点。
在一些关于 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") +"]")
第一个解决方案抛出一个错误 'unknown function FORMAT',第二个解决方案中的错误是“"VBAMDX.NOW()" 需要一个参数 "index"”。如果我只用现在替换 VBAMDX.NOW,VBAMDX.FORMAT 也是如此。 但是所有解释 VBAMDX 的页面都有两个参数用于 FORMAT 和 none 用于 NOW...
是-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") +"]")
如果你尝试这 3 种措施,它们都会失败吗?
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")
...
我猜这是因为不支持Excel FORMAT(最新版本的icCube改进了错误报告)。相反,我会使用 page:
中提到的函数StrToMember( "[Time].[Calendar].[Day].&["+ DateToString( NOW()-1,"yyyy-MM-dd") +"]")
但是在 icCube 中你有 LookupByKey 函数,如果你的键是日期,它是一个更强大的解决方案:
LookupByKey( [Time].[Calendar].[Day], Now() )
或者如果您需要约会:
LookupByKey( [Time].[Calendar].[Day], Today() )
您可以使用函数轻松导航日期 (doc)。
希望对您有所帮助。