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

SSAS计算脚本中的ClosingPeriod函数返回空白,ssas,mdx,cube,Ssas,Mdx,Cube,以下是表达方式: 结束期间([期间].[会计日期].[日期],[期间].[会计日期].CurrentMember) 有人能提出为什么它会返回空白吗 更新的完整脚本: CASE ClosingPeriod( [Date].[Fiscal].[DATE], [Date].[Fiscal].CURRENTMEMBER ) WHEN null THEN MAX (NONEMPTY (

以下是表达方式: 结束期间([期间].[会计日期].[日期],[期间].[会计日期].CurrentMember)

有人能提出为什么它会返回空白吗

更新的完整脚本:

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大小写。

需要查看所有脚本才能进行分析,因为该表达式的上下文在
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
正在返回
财务
层次结构的
日期
级别的最后一个成员:


包括一个
案例
结构,我仍然得到回报:

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] 

要尝试在以下行中强制会计层次结构为null,我将对行使用日历:

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];
这将返回以下内容:


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

在复杂的计算中,添加一些辅助度量有助于理解发生了什么。我通常从大型计算的子表达式中进行这些度量,将
.Name
添加到成员中,或对集合应用
SetToStr
(假设它们的显示大小合理)。因此,度量定义如下

[Date].[Fiscal].CURRENTMEMBER.Name

如果将这些度量值添加到查询中,会发生什么,这将使其更加透明


此外,它通常有助于在将计算放入计算脚本之前,在
SELECT
语句的
WITH
子句中在线尝试计算,因为更改此脚本和查看更改的即时结果更快。

请添加脚本的其余部分-上下文在MDX中非常重要?实际上,我正在使用Visual Studio创建SSAS项目。我正在计算脚本编辑器中编写此脚本,并希望将CLosingPeriod返回的值保存在变量中。@Kash ok。“显示空白”是在什么上下文中?例如,如果查询中没有在行或列上使用层次结构
[Period].[Fiscal Dates]
,那么您的计算将是空白的,因为实际上没有currentmember。我已用完整脚本更新了问题。请看一看。@whytheq您故意混合
[Date]是什么原因。[日历]
[日期][会计]
第三次尝试中的层次结构?@FrankPl-这是经过深思熟虑的,以便财政不在行或列上-这是为了让财政测试案例的THEN部分得到null。否则我们会遇到null吗?+1将在我的Adventure Works版本的计算中尝试此操作…我可以在我的反对AdWks的第二个脚本。OP似乎说他的clac总是
null
。有什么想法吗,弗兰克?@whytheq实际上,这是一个边缘案例,我不确定
案例的结束时间(…)当
真正比较时。在数字上下文中,
NULL
0
应该相等。如果要检查成员引用是否为空,则不应使用
=NULL
,而应使用
IsEmpty()
。因此,
CASE
表达式的变体在每个
中检查一个完整的条件时,
在这里会更合适,因为你可以更清楚地说明你真正比较的是什么。好的,弗兰克,让我修改我帖子中的第二个脚本,以反映你的建议-我将对发现进行评论。弗兰克-我已经为你添加了第三个脚本我的帖子。我认为这个计算中有一个矛盾-如果[Date].[Fiscal]为空/空,那么为什么要在最大计算中包括[Date].[Fiscal]?!
ClosingPeriod(
    [Date].[Fiscal].[DATE],
    [Date].[Fiscal].CURRENTMEMBER
    ).Name