从子级别获取不同的TOP N的MDX查询?

时间:2018-02-06 16:06:50

标签: sql-server ssas mdx

我正在努力获得MDX查询以从子级别中选择TOP N.

在下面的数据集中,我试图每天获得销售员和最高销售额(突出显示) - 请注意" Ben"在最后一天之前没有任何销售数据: -

Data

所以我希望看到的是: -

Correct Results

我查看了这篇文章" Generate, TopCount, and All Others"并创建了这个查询: -

WITH
SET [DateTime2Set] AS ([Time].[Day].&[20171101]:[Time].[Day].&[20171106])

SET [Sales Guys] AS [Sales Persons].MEMBERS

SET [TopSales] AS
GENERATE(
    DateTime2Set,
    TopCount(
        EXISTING [Sales Guys],
        1,
        [Sales Amount]
    )
)

SELECT 
{
    [Sales Amount]
}
ON 0,

{
NonEmpty(
    (
        [DateTime2Set],
        [TopSales]
    )
    ,[Sales Amount]
)
}

 ON 1

FROM [Cube]

当我运行查询时,我得到以下结果,带有意外的项目(突出显示)

enter image description here

所以正在发生的事情是每天的最高项目被添加到整个集合中,然后加入到日期中。

这不是我要求的。 我尝试添加交叉连接,如MSDN documentation for the MDX Generate function中所述: -

SET [TopSales] AS
GENERATE(
    DateTime2Set,
    TopCount(
        [Time].[Day].CURRENTMEMBER * [Sales Guys],
        1,
        [Sales Amount]
    )
)

但是得到错误: -

  

在Crossjoin函数中多次使用Day层次结构

如何更改查询以获得我需要的结果?

1 个答案:

答案 0 :(得分:1)

好的,我终于解决了。

SET [TopSales] AS
GENERATE(
    DateTime2Set,
    TopCount(
        DateTime2Set.CURRENTMEMBER * EXISTING Tags,
        1,
        [Sales Amount]
    )
)

SELECT 
{
    [Sales Amount]
}
ON 0,

{
NonEmpty(
    (
        [TopSales]
    )
    ,[Sales Amount]
)
}

ON 1

FROM [EventsCube]

我刚刚从列中删除了DateTime2Set,并在[Top Sales]计算成员中交叉加入了DateTime2Set