1

我在 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 ;
4

2 回答 2

0

您需要进行一些字符串操作和 VB 代码来实现这一点,因为 MDX 没有getdate()函数。正如Whytheq 所提到的那样,将来您只需在维度本身中包含财政年度,就可以省去很多麻烦。

 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
于 2015-08-27T12:36:00.383 回答
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]        
于 2015-08-27T13:00:22.803 回答