我需要将多维数据集作为普通表进行查询。此外,出于性能原因,我需要使用命名集(如果不使用该集,则查询需要10倍)。问题是我为日期时间计算成员的每一行获得相同的值。顺便说一句,我正在使用这个成员,因为我还没有找到任何方法来查询列上的命名集。
查询如下所示:
with
set [CurrentDates] as filter([Time].[Date].Members, not isempty([Measures].[Net Sold Units]))
member [Measures].[Date Time] as [CurrentDates].Item(1).Member_Key
select
{
[Measures].[Date Time],
[Measures].[Song Name]
--other calculated members
}
on columns
,
subset
(
{
order
(
except
(
NONEMPTY([Trend Transaction].[Trend Transaction].Members, [Measures].[Net Sold Units]),
[Trend Transaction].[Trend Transaction].[All]
),
[Measures].[Date Time], basc
)
}
,0, 50)
on rows
from Trends
where
(
{[Time].[Date].&[2012-09-01T00:00:00],[Time].[Date].&[2012-09-02T00:00:00]}
)
我得到的结果看起来像这样:
日期时间歌曲名称
9/1/2012你去过哪里 9/1/2012我们年轻 9/1/2012全面清醒(Katy Perry原创演出)[卡拉OK版] 9/1/2012呼吸 9/1/2012如此复杂(最初由Rick Ross执行)[卡拉OK版] 。 。
最后一首歌的日期显然是错误的,应该是2012年9月2日
我认识到我有点SSAS新手,可能我在这里缺少一些东西:)
有什么方法可以做我需要的吗?
提前致谢!
答案 0 :(得分:0)
您计算的:member [Measures].[Date Time] as [CurrentDates].Item(1).Member_Key
将始终引用您集合中的第二项(请记住它基于0)
你想要的是使用RANK
函数:这与CURRENTMEMBER
函数一起在渲染集合时返回集合中的项目位置。例如用:
set [CurrentDates] as filter([Time].[Date].Members, not isempty([Measures].[Net Sold Units]))
member MemberRank As 'RANK(Time].[Date].CURRENTMEMBER , CurrentDates)'
member [Measures].[Date Time] as [CurrentDates].Item(MemberRank-1).UNIQUE_NAME
答案 1 :(得分:0)
嗯,最终解决方案是设置和成员这样:
set CurrentDates as filter([Time].[Date].[Date], not isempty([Measures].[Net Sold Units]))
member [Measures].[Date Time] as CDATE(NONEMPTY(CurrentDates, [Measures].[Net Sold Units]).Item(0).Member_Key)
关键是将命名集置于SCOPE中,以便在成员中引用它。