带有IIF和TAIL()函数的SSAS MDX问题

带有IIF和TAIL()函数的SSAS MDX问题,mdx,analysisservices,Mdx,Analysisservices,专家们 我使用的是SQL SSAS Std.2017,最后希望创建一个计算成员,返回我数据的最后一个月的日期或当前日期(如果最后一个现有数据是今天的)。 (=>如果今天是8月31日,我想检索8月31日的数据,否则如果今天是8月30日,检索7月31日) 为了开发此成员,我目前正在SQL Server中创建MDX查询。我很难理解什么是真正的“元组集表达式”(因为TAIL()函数将根据MSDN返回子集(ergo set)),但事实上,在处理.Item(0)函数的结果时,我收到了错误。在MSDN中,我找

专家们

我使用的是SQL SSAS Std.2017,最后希望创建一个计算成员,返回我数据的最后一个月的日期或当前日期(如果最后一个现有数据是今天的)。 (=>如果今天是8月31日,我想检索8月31日的数据,否则如果今天是8月30日,检索7月31日)

为了开发此成员,我目前正在SQL Server中创建MDX查询。我很难理解什么是真正的“元组集表达式”(因为TAIL()函数将根据MSDN返回子集(ergo set)),但事实上,在处理.Item(0)函数的结果时,我收到了错误。在MSDN中,我找不到有关“元组集”的信息,也找不到如何使它们发挥作用的信息

My Date维度有一个层次结构JMT(Date类型的年|月|日|日期键)

为了接收交叉乘积的最新日期成员,我使用了TAIL(NONEMPTY(date…Members,{(DimX.&.,DimY.&.,DimZ.&.})表达式,它工作得很好

但是我如何在今天的日期和上个月的日期之间做出选择呢

我在2月(2日)的测试MDX如下:

        SELECT { 
        IIF(
            TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[2]) })).Item(0) --.Properties('Date Key', TYPED)
            > NOW()
            , TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[1]) }))
            , TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[2]) }))
            )
--      , 
--      TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[2]) })) } on columns  
    , { [Measures].[Turnover] } on rows
    FROM [Finance]
结果:

正如你所看到的,IIF函数并不是我想要的。它假定.Item(0)大于NOW(),因此返回1月(1)的“31”成员。预计:2月29日

我想,可能是数据类型和.Item(0)返回的实际值有问题。但是如果我想使用.Properties('Date Key',TYPED),它会声明“找不到Date Key维度属性。请参见下图

在DateDim的图像中,蓝色区域应为“DateDim.JMT;”

你有什么建议吗? 谢谢,Cordt

如果您切换此选项:

TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[2]) })).Item(0)
对以下方面有帮助吗

Tail
(
  NonEmpty
  (
    [DateDim].[JMT].[T].MEMBERS
   ,{
      (
        [DimX].[X].&[200]
       ,[DimY].[Company].&[4499166]
       ,[DateDim].[JMT].[M].&[2020]&[2]
      )
    }
  )
).Item(0).Item(0).MemberValue
如果切换此选项:

TAIL(NONEMPTY([DateDim].[JMT].[T].Members, { ([DimX].[X].&[200], [DimY].[Company].&[4499166], [DateDim].[JMT].[M].&[2020]&[2]) })).Item(0)
对以下方面有帮助吗

Tail
(
  NonEmpty
  (
    [DateDim].[JMT].[T].MEMBERS
   ,{
      (
        [DimX].[X].&[200]
       ,[DimY].[Company].&[4499166]
       ,[DateDim].[JMT].[M].&[2020]&[2]
      )
    }
  )
).Item(0).Item(0).MemberValue

悲伤不能解决我的问题,但它给了我新的想法和更好的理解,所以谢谢你的回复:-)悲伤不能解决我的问题,但它给了我新的想法和更好的理解,所以谢谢你的回复:-)