在 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]
我在 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]