在SSAS计算脚本中由ClosingPeriod函数返回的空白

时间:2014-07-02 13:11:34

标签: ssas mdx cube

以下是表达式: ClosingPeriod([期间]。[财政日期]。[日期],[期间]。[财政日期]。现在会员)

有谁可以建议为什么它可能会返回空白?

更新完整脚本:

CASE  
    ClosingPeriod(
        [Date].[Fiscal].[DATE],
        [Date].[Fiscal].CURRENTMEMBER
        ) 
WHEN null THEN 
    MAX
        (NONEMPTY 
            (
            [Period].[Fiscal Dates].[Date].Members 
            * 
            [Measures].[Indiv Count]
            ),     
        [Period].[Date].currentmember.MEMBER_KEY
    )
ELSE 
    ClosingPeriod(
        [Date].[Fiscal].[DATE],
        [Date].[Fiscal].CURRENTMEMBER
        ) 

我正在使用此脚本为变量赋值。在此表达式中,始终执行null case。

2 个答案:

答案 0 :(得分:1)

这不是一个完整的解决方案,而是更多找到它的方法。

在复杂的计算中,添加一些辅助措施只是为了理解发生了什么。我通常从大型计算的子表达式,向成员添加.Name或在集合上应用SetToStr来做出这些度量(假设它们具有合理的大小以便显示)。因此,测量定义如

[Date].[Fiscal].CURRENTMEMBER.Name

ClosingPeriod(
    [Date].[Fiscal].[DATE],
    [Date].[Fiscal].CURRENTMEMBER
    ).Name
如果您将这些度量添加到查询中,

可以使其更加透明。

此外,在将WITH语句放入计算脚本之前,通常可以尝试在SELECT语句的{{1}}子句中进行在线计算,因为更改此更快并查看其直接结果变化

答案 1 :(得分:0)

需要查看您的所有脚本能够分析,因为该表达式的上下文在MDX中计算很多。

在Adventure Works多维数据集上试试这个:

WITH 
    MEMBER [Measures].[Close] AS
        CLOSINGPERIOD( 
            [Date].[Fiscal].[DATE]
            , [Date].[Fiscal].CURRENTMEMBER
        ).Properties('key0', TYPED)
SELECT 
    {
    [Measures].[Close] 
    } on 0,
    {[Date].[Fiscal].[Fiscal Year].MEMBERS}
ON 1
FROM [Adventure Works] 

以下返回似乎没问题:CLOSINGPERIOD正在返回Date层次结构的Fiscal级别的最后一个成员:

enter image description here


包括CASE结构我仍然得到回报:

WITH 
    MEMBER [Measures].[Close] AS

        CASE  
            ClosingPeriod(
                [Date].[Fiscal].[DATE],
                [Date].[Fiscal].CURRENTMEMBER
                ).MEMBER_KEY 
        WHEN null THEN 
            MAX
                (NONEMPTY 
                    (
                    [Date].[Fiscal].[DATE].Members 
                    * 
                    [Measures].[Reseller Sales Amount]
                    ),     
                [Date].[Fiscal].CURRENTMEMBER.MEMBER_KEY
            )
        ELSE 
            ClosingPeriod(
                [Date].[Fiscal].[DATE],
                [Date].[Fiscal].CURRENTMEMBER
                ).MEMBER_KEY 
        END
SELECT 
    {
        [Measures].[Reseller Sales Amount],
    [Measures].[Close] 
    } on 0,
    {[Date].[Fiscal].[Fiscal Year].MEMBERS}
ON 1
FROM [Adventure Works] 

enter image description here

要尝试在下面的Fiscal层次结构中强制为null,我在行上使用Calendar:

WITH 
  MEMBER [Measures].[Close] AS 
    CASE 
      WHEN 
        IsEmpty
        (
          ClosingPeriod
          (
            [Date].[Fiscal].[DATE]
           ,[Date].[Fiscal].CurrentMember
          ).Member_Key
        ) 
      THEN 
        Max
        (
          NonEmpty
          (
            [Date].[Fiscal].[DATE].MEMBERS * [Measures].[Reseller Sales Amount]
          )
         ,[Date].[Fiscal].CurrentMember.Member_Key
        )
      ELSE 
        ClosingPeriod
        (
          [Date].[Fiscal].[DATE]
         ,[Date].[Fiscal].CurrentMember
        ).Member_Key
    END 
SELECT 
  {
    [Measures].[Reseller Sales Amount]
   ,[Measures].[Close]
  } ON 0
 ,{[Date].[Calendar].[Calendar Year].MEMBERS} ON 1 //][Date].[Fiscal].[Fiscal Year].MEMBERS
FROM [Adventure Works];

返回以下内容:

enter image description here