在MDX查询中使用Case语句获取会计年度会产生错误

时间:2015-08-26 19:44:20

标签: sql-server tsql mdx ssas-2012

我在Excel中使用MDX查询从多维数据集中获取数据。每年七月财政年度都会发生变化,我们必须手动更改。有什么办法可以在下面的查询中实现这个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 ;

2 个答案:

答案 0 :(得分:0)

由于MDX没有getdate()函数,因此您需要执行一些字符串操作和VB代码来实现此目的。正如为什么他们提到的那样,你将在未来为自己节省很多头痛,只是将财政年度纳入维度本身。

 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

答案 1 :(得分:0)

您可以使用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]