首页 > 解决方案 > MDX中动态年份过滤器的问题

问题描述

我在 Azure 数据工厂中使用了以下查询(这是复制操作的来源):

 SELECT
    { [Measures].[0INV_QTY],
    [Measures].[0NET_VAL_S] } 
ON COLUMNS,
NON EMPTY
    { [0CUST_SALES].[LEVEL01].MEMBERS *
    [0SALESORG].[LEVEL01].MEMBERS *
    [0COMPANY].[LEVEL01].MEMBERS *
    [0MATERIAL].[LEVEL01].MEMBERS *
    [ZDEBITOR].[LEVEL01].MEMBERS *
    [0FISCPER].[LEVEL01].MEMBERS *
    [0DEB_CRED].[LEVEL01].MEMBERS *
    [0BILLTOPRTY].[LEVEL01].MEMBERS *
    [0DOC_CATEG].[LEVEL01].MEMBERS *
    [0SHIP_TO].[LEVEL01].MEMBERS }
DIMENSION PROPERTIES
    [0SALESORG].[20SALESORG],
    [0COMPANY].[20COMPANY],
    [0CUST_SALES].[80CUST_SALES],
    [0CUST_SALES].[20CUST_GRP1],
    [0CUST_SALES].[20PMNTTRMS],
    [ZDEBITOR].[20CRED_LIMIT],
    [0MATERIAL].[20MATERIAL],
    [0DEB_CRED].[20DEB_CRED],
    [0BILLTOPRTY].[20BILLTOPRTY],
    [0DOC_CATEG].[20DOC_CATEG],
    [0SHIP_TO].[20SHIP_TO],
    [0FISCPER].[80FISCPER]
ON ROWS
FROM $0SD_C03
WHERE ({[0CALYEAR].[2020], [0CALYEAR].[2021], [0CALYEAR].[2018], [0CALYEAR].[2019]})

在这里,我想用类似的东西替换 WHERE,Cast(YEAR(GETDATE())-4 as varchar(10))现在我对 MDX 真的很陌生,但我一直卡住。谁能指出我正确的方向?

所以我想要实现的是不必每年调整查询并且只能拥有过去 4 年。

标签: mdxazure-data-factorymdx-query

解决方案


如果您在 MDX 中寻找如下 SQL 等价物

SELECT ... From ... WHERE date > DATEADD(year,-4,GETDATE())

尝试使用“with member”和函数parallelperiod。

CREATE MEMBER CurrentCube.Measures.[Last4Years] AS

ParallelPeriod( [Date].[Date].[Date Yr], 4, StrToMember(“[Date].[Date].&[” + Format(now(), “yyyyMMdd”) + “]”))
: StrToMember(“[Date].[Date].&[” + Format(now(), “yyyyMMdd”) + “]”)
;

推荐阅读