MDX 基于其他维度值的动态维度过滤器

MDX Dynamic dimension filter based on value of other dimension

如何在 MDX 中使用二维值进行过滤?

所需的结果应包括 [Purchase Date].[Date] 在今天之前减去距 [Accounting Date].[Year] 的年数的记录。因此,结果应包括基于每个 [Accounting Date].[Year] 成员的 [Purchase Date].[Date] 从今天开始的 YoY 记录。

我想要如下内容:

 SELECT NON EMPTY [Measures].[Amount] ON 0,
 NON EMPTY [Accounting Date].[Year].[Year].ALLMEMBERS ON 1
 FROM [Tabular_Model]
 WHERE (
    NULL :
    STRTOMEMBER("[Purchase Date].[Date].&["+ Format(DateAdd("YYYY", [Accounting Date].[Year].CURRENTMEMBER.MEMBER_VALUE - 2020, Now()),"yyyy-MM-ddT00:00:00") + "]")
 )

但失败并出现错误:托管存储过程 DateAdd 的执行失败并出现以下错误:Microsoft::AnalysisServices::AdomdServer::AdomdException。 'All' 的语法不正确。 (全部)。

为什么 CURRENTMEMBER.MEMBER_VALUE 适用于 HAVING 但不适用于我的 WHERE 子句?什么是正确的方法?

尝试以下测量和查询:

 WITH
 MEMBER [Measures].[Trailing Amount] as    SUM({NULL :
    STRTOMEMBER("[Purchase Date].[Date].&["+ Format(DateAdd("YYYY", [Accounting Date].[Year].CURRENTMEMBER.MEMBER_VALUE - 2020, Now()),"yyyy-MM-ddT00:00:00") + "]")}, [Measures].[Amount])
 SELECT [Measures].[Trailing Amount] ON 0,
 NON EMPTY [Accounting Date].[Year].[Year].MEMBERS ON 1
 FROM [Tabular_Model]

如果 MDX 的性能没有您希望的那么好,那么您可以考虑将以下 DAX 度量添加到您的表格模型中。以下 DAX 查询说明了如何使用它,但如果将此 DAX 度量值放入模型中,则可以使用 MDX 查询对其进行查询,并且它的性能应该比 MDX 计算更好:

define
measure 'Your Table Name Here'[Trailing Sales] = 
 VAR YearOffset = SELECTEDVALUE('Accounting Date'[Year]) - 2020
 VAR NowDate = NOW()
 VAR EndDate = DATE(YEAR(NowDate)+YearOffset,MONTH(NowDate),DAY(NowDate))
 RETURN CALCULATE([Amount], 'Purchase Date'[Date] <= EndDate)
evaluate ADDCOLUMNS(ALL('Accounting Date'[Year]),"Trailing Sales",[Trailing Sales])