MDX上个月到目前为止,当月份具有不同的天数时,不显示日期级别的值

时间:2015-09-28 10:48:26

标签: date ssas mdx pivot-table hierarchy

我在SSAS多维数据集中使用了上个月的日期测量。我发现它在互联网的某个地方。它已设置如下:

iif (
    [Date].[Calendar].currentmember.properties("level_number",Typed)<=2
    ,null
    ,
    iif (
        isempty (ParallelPeriod([Date].[Calendar].[Month],1,[Date].[Calendar].currentmember))
        ,Aggregate(
        {
            StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).FirstChild.uniquename)
            :StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).LastChild.uniquename)
        },[Measures].[Total actuals Prorata]
        )
           ,SUM(
            MTD(
                ParallelPeriod([Date].[Calendar].[Month]
                                ,1
                                ,[Date].[Calendar].currentmember
                                )
                ),[Measures].[Sales]
            )
        )

它在月级上按预期工作。即使我在日常级别下钻,它也在工作!但我的问题是,例如,在7月31日,由于没有6月31日,我的最后一个月到达了#VALUE。对于所有其他月份来说,这个问题与目前的日子相比还少。上面的函数似乎在&#34; iif语句中摆脱了这个问题&#34;但它没有!我的日历层次结构按年,季度,月,日组织。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

更改部件

Aggregate(
        {
            StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).FirstChild.uniquename)
            :StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).LastChild.uniquename)
        },[Measures].[Total Actuals Prorata]

以下工作?

    Aggregate(
    {
        Ancestor
              (
               [Date].[Calendar].currentmember,
               [Date].[Calendar].[Month]).Lag(1).FirstChild
              )
        :
       Ancestor
             (
              [Date].[Calendar].currentmember,
              [Date].[Calendar].[Month]).Lag(1).LastChild
             )
    },[Measures].[Sales]

答案 1 :(得分:0)

也许尝试将Aggregate部分简化为元组:

IIF(
    [Date].[Calendar].currentmember.properties("level_number",Typed)<=2
   , NULL
   ,IIF(
        ISEMPTY(
            PARALLELPERIOD(
               [Date].[Calendar].[Month]
              ,1
              ,[Date].[Calendar].currentmember
              )
            )
        , (
           Ancestor(
               [Date].[Calendar].currentmember
              ,[Date].[Calendar].[Month]).PREVMEMBER
           ,[Measures].[Total Actuals Prorata]
          )
         ,SUM(
            MTD(
               PARALLELPERIOD(
                 [Date].[Calendar].[Month]
                ,1
                ,[Date].[Calendar].currentmember
               )
              )
            ,[Measures].[Sales]
            )
        )

答案 2 :(得分:-1)

谢谢你们!我终于让我的功能发挥作用了。实际上,问题出在Aggregate声明中。事实上,这个功能在测试立方体上完美运行,但我不明白它为什么不在另一个上。所以我做了什么,我只是改变了

 Aggregate(
    {
        StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).FirstChild.uniquename)
        :StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).LastChild.uniquename)
    },[Measures].[Sales]
    )

通过

SUM(
    {
        StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).FirstChild.uniquename)
        :StrToMember(Ancestor([Date].[Calendar].currentmember,[Date].[Calendar].[Month]).Lag(1).LastChild.uniquename)
    },[Measures].[Sales]
    ) 

它有效!但我也会尝试使用您的功能来检查结果。谢谢!