问题描述
专家
我正在使用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]
如您所见,IIF函数无法满足我的要求。它假定.Item(0)大于Now(),因此返回January(1)的“ 31”成员。预期:2月的“ 29”。
我想可能是数据类型和.Item(0)返回的实际值有问题。但是,如果我要使用.Properties('Date Key',TYPED),它会指出“找不到日期键维属性。请参见下图。
在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