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)。

希望对您有所帮助。