在 MDX 查询中使用 Case 语句获取财政年度会出错

Getting Fiscal year using Case statement in MDX Query gives Error

我在 Excel 中使用 MDX 查询从多维数据集获取数据。每年 7 月,财政年度都会更改,我们必须手动更改。有什么办法可以在下面的查询中实现这个 case 语句吗?

SELECT 
  ( { [Dim ID].[ID Key].&[7]} ) ON COLUMNS 
FROM ( SELECT 
  ( { [Billing].[FY].&***[2015]*** } ) ON COLUMNS
  FROM [Billing DW])
) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

我想写这个案例陈述而不是 [2015] 年。

CASE 
  WHEN MONTH(getdate()) > 7 THEN YEAR(getdate()) + 1 
  ELSE YEAR(getdate()) 
END ;

您需要进行一些字符串操作和 VB 代码来实现此目的,因为 MDX 没有 getdate() 函数。正如 whytheq 提到的那样,您将来只需在维度本身上包含 Fiscal Year 就会省去很多麻烦。

 SELECT ( { [Billing].[FY].&[2015] } ) 

会变成

 SELECT CASE WHEN FORMAT(now(), "MM") > "07"
    THEN StrToMember("[Billing].[FY].&["+Format(now(), "yyyy")+"]").lead(1)
    ELSE
    StrToMember("[Billing].[FY].&["+Format(now(), "yyyy")+"]") END

您可以动态创建一个代表您需要的结算年度的成员,使用 IIF 根据当前月份进行选择。然后使用 strtomember() 在查询中挑选出正确的成员。

您的原始查询将变成这样:

WITH MEMBER [Current Month] AS MONTH(NOW())
     MEMBER [Current Year] AS YEAR(NOW())
     MEMBER [Billing Year] AS IIF([Current Month] > 7, [Current Year] + 1, [Current Year])
SELECT [Dim ID].[ID Key].&[7] ON COLUMNS,
       strtomember('[Billing].[FY].&[' + cstr([Billing Year].Value) + ']') ON ROWS
FROM [Billing DW]