Ssas MDX-各日期总销售额排名前十的销售人员

Ssas MDX-各日期总销售额排名前十的销售人员,ssas,mdx,Ssas,Mdx,我正在尝试这样做,但在多维数据集中使用MDX时: select * from ( select Date, SalesPerson, TotalSales, row_number() over(partition by Date order by TotalSales desc) as Num from SalesFact as ms ) as x where Num < 5 order by Date, SalesPerson,

我正在尝试这样做,但在多维数据集中使用MDX时:

select
    *
from
(
    select 
        Date, SalesPerson, TotalSales, row_number() over(partition by Date order by TotalSales desc) as Num
    from SalesFact as ms
) as x
where
    Num < 5
order by
    Date, SalesPerson, Num desc
我想要的是一个查询,它将日期和销售人员放在行上,将TotalSales放在列上

我想看看每个月的前5名销售人员,以及他们的销售额

当我尝试这样做时,它似乎没有按每个日期筛选/分组销售人员,并为每个日期获得前5名。返回的值到处都是,包括非常低的值和空值。值得注意的是,尽管TotalSales差异很大,但每个日期的销售人员列表都是相同的

select
    [Measures].[TotalSales] on columns,
    (
        [Date].[Hierarchy].[Date].members,
        subset
        (
            order
            (
                [SalesPerson].children,
                [Measures].[TotalSales], 
                bdesc
            ),
            0,
            5
        )
    ) on rows
from
    Hypercube
似乎子集内的所有内容都需要按当前[Date].[Hierarchy].[Date]进行筛选,但使用CurrentMember会产生交叉连接/轴错误:

select
    [Measures].[TotalSales] on columns,
    (
        [Date].[Hierarchy].[Date].members,
        subset
        (
            order
            (
                ([SalesPerson].children, [Date].[Hierarchy].CurrentMember),
                [Measures].[TotalSales], 
                bdesc
            ),
            0,
            5
        )
    ) on rows
from
    Hypercube
错误:正在执行查询。。。查询3、2层次结构 在交叉连接函数中多次使用

执行完毕

我尝试了上一个查询的几个变体,但没有成功


希望这些答案也能对其他刚接触MDX的人有所帮助。

我最终找到了如何做我想要的事情。解决方案围绕使用Generate函数展开,从MSDN的基本示例开始,将维度和度量值修改为多维数据集中的维度和度量值,使我朝着正确的方向前进

有更好的办法吗

另外,要小心尝试将集合重构到with块中。当对集合进行评估/更改其范围并将更改结果时,这似乎会发生变化

with

set
Dates as
{
    [Date].[Hierarchy].[Date].&[2009-02-01T00:00:00],
    [Date].[Hierarchy].[Date].&[2009-03-01T00:00:00],
    [Date].[Hierarchy].[Date].&[2009-04-01T00:00:00]
}

select
    Measures.[TotalSales]
    on columns,
    generate
    (
        Dates,
        topcount
        (
            [Date].Hierarchy.CurrentMember
            *
            [SalesPerson].Children,
            5,
            Measures.[TotalSales]
        )
    )
    on rows
from
    Hypercube
with

set
Dates as
{
    [Date].[Hierarchy].[Date].&[2009-02-01T00:00:00],
    [Date].[Hierarchy].[Date].&[2009-03-01T00:00:00],
    [Date].[Hierarchy].[Date].&[2009-04-01T00:00:00]
}

select
    Measures.[TotalSales]
    on columns,
    generate
    (
        Dates,
        topcount
        (
            [Date].Hierarchy.CurrentMember
            *
            [SalesPerson].Children,
            5,
            Measures.[TotalSales]
        )
    )
    on rows
from
    Hypercube