基于其他尺寸值的MDX动态尺寸过滤器

时间:2019-12-24 13:44:22

标签: mdx ssas-tabular

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

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

我想要以下内容:

[Accounting Date].[Year]

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

为什么CURRENTMEMBER.MEMBER_VALUE可以用于HAVING但不能在我的WHERE子句中使用?正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

尝试以下措施并进行查询:

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