1

专家们,

我正在使用 SQL SSAS 标准。2017 年,最后想要创建一个计算成员,如果最后一个现有数据是今天,则返回我的数据的上个月的一天或当天。(=> 如果今天是 8 月 31 日,我想检索我的数据的 8 月 31 日,否则如果今天是 8 月 30 日,则检索 7 月 31 日)

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

我的日期维度有一个层次结构 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) 的“31”成员。预计:2 月 29 日。

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

在此处输入图像描述 在 DateDim 的图像中,它应该是蓝色区域中的“DateDim.JMT”;-)。

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

4

1 回答 1

0

如果你切换这个:

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
于 2020-08-21T16:38:00.693 回答