0

我需要将多维数据集查询为普通表。此外,出于性能原因,我需要使用命名集(如果不使用该集,查询需要 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]}
)

我得到的结果是这样的:

日期 时间 歌曲名称


2012 年 9 月 1 日你去过哪里 2012 年 9 月 1 日我们还年轻 2012 年 9 月 1 日清醒(原由凯蒂佩里表演)[卡拉 OK 版] 2012 年 9 月 1 日呼吸 2012 年 9 月 1 日如此复杂(最初由 Rick Ross 表演)[卡拉 OK 版]。. .

最后一首歌的日期显然是错误的,应该是 2012 年 9 月 2 日

我认识到我有点 SSAS 新手,可能我在这里缺少一些东西:)

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

提前致谢!

4

2 回答 2

0

您计算的 :member [Measures].[Date Time] as [CurrentDates].Item(1).Member_Key 将始终引用您集合中的第二个项目(记住它是基于 0 的)

您想要的是使用该RANK函数: this 与该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
于 2013-02-03T00:48:33.653 回答
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 中,使其在成员中引用。

于 2013-02-04T14:42:45.433 回答