当月份有不同的天数时,MDX 上月至今未在日级别显示值

MDX Last Month to date not showing value on Day level when month has different number of days

我在我的 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 日,我的上个月至今有 #VALUE,因为没有 6 月 31 日。这对于所有其他月份来说都是同样的问题,从当前开始的天数更少。上面的函数似乎在 "iif statements" 中解决了这个问题,但事实并非如此!我的日历层次结构按年、季度、月、日组织。有什么帮助吗?

是否更改部分

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]

也许尝试将聚合部分简化为一个元组:

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]
            )
        )

谢谢大家!我终于让我的功能发挥作用了。实际上,问题出在聚合语句上。事实上,这个函数在一个测试立方体上工作得很好,但我不明白为什么它在另一个测试立方体上没有。所以我做了什么,我只是改变了

 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]
    ) 

而且成功了!但我也会尝试你的功能来检查结果。谢谢!