我在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 ;
答案 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]