具有命名集的成员在SSAS中返回的值始终相同

时间:2013-02-01 18:47:07

标签: ssas mdx olap olap-cube

我需要将多维数据集作为普通表进行查询。此外,出于性能原因,我需要使用命名集(如果不使用该集,则查询需要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新手,可能我在这里缺少一些东西:)

有什么方法可以做我需要的吗?

提前致谢!

2 个答案:

答案 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中,以便在成员中引用它。