IIF和TAIL函数的SSAS MDX问题

问题描述

专家

我正在使用sql SSAS Std。到2017年,最后要创建一个计算所得的成员,该成员将返回我数据的最后一个月日或如果当前​​的最新数据是今天,则返回当天。 (=>如果今天是8月31日,我想检索我的数据的8月31日,否则,例如今天是8月30日,则检索7月31日的数据)

要开发此成员,我目前正在sql Server中创建MDX查询。我很难理解什么是真正的“元组集表达式”(因为TAIL()函数将根据MSDN返回一个子集(ergo集)),但实际上我在使用.Item(0)时收到错误)对其结果起作用。在MSDN中,我找不到有关“元组集”以及如何使它们运行以及我想要的信息。

“我的日期”维度具有层次结构JMT(“日期”类型的“年|月|日|日期”键)。

要接收交叉产品的最新日期会员,我正在使用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,[DateDim].[JMT].[M].&[2020]&[1]) })),[DateDim].[JMT].[M].&[2020]&[2]) }))
            )
--,--      TAIL(NONEMPTY([DateDim].[JMT].[T].Members,[DateDim].[JMT].[M].&[2020]&[2]) })) } on columns,{ [Measures].[Turnover] } on rows
    FROM [Finance]

结果:

Result

如您所见,IIF函数无法满足我的要求。它假定.Item(0)大于Now(),因此返回January(1)的“ 31”成员。预期:2月的“ 29”。

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

enter image description here

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

您有什么建议吗? 谢谢你,科特

解决方法

如果您切换此:

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],[DateDim].[JMT].[M].&[2020]&[2]
      )
    }
  )
).Item(0).Item(0).MemberValue