如何在MDX查询中特别是三天内销售前三项?

时间:2015-03-26 12:24:08

标签: ssas mdx olap olap-cube

这是我的MDX查询。这将是特定三天销售的物品。此查询返回所有已售出的商品,但我希望在该特定日期仅获得前3个商品。

我如何才能得到这个?这是我的MDX查询:

select
{
    [Measures].[Quantity],
    [Measures].[Net Sales]
}
on columns,
NON EMPTY
ORDER
(
    (
        [Products].[Item Description].children    
    ),
    [Measures].[Quantity], DESC
)
    * [Calendar].[Date].[Date]
on rows
from
(
select 
{
    [Calendar].[Date].&[2015-03-23T00:00:00],
    [Calendar].[Date].&[2015-03-22T00:00:00],
    [Calendar].[Date].&[2015-03-21T00:00:00]
}
ON columns

FROM [SalesReport])

1 个答案:

答案 0 :(得分:0)

使用TopCount功能,如下所示:

select
{
    [Measures].[Quantity],
    [Measures].[Net Sales]
}
on columns,
NON EMPTY
TopCount([Products].[Item Description].children * [Calendar].[Date].[Date], 
        3,
        [Measures].[Quantity])      
on rows
from
(
select 
{
    [Calendar].[Date].&[2015-03-23T00:00:00],
    [Calendar].[Date].&[2015-03-22T00:00:00],
    [Calendar].[Date].&[2015-03-21T00:00:00]
}
ON columns

FROM [SalesReport])

要获取每个日期的前3条记录,您可以使用GENERATE功能:

select
{
    [Measures].[Quantity],
    [Measures].[Net Sales]
}
on columns,
NON EMPTY
GENERATE([Calendar].[Date].[Date],  
        TopCount([Products].[Item Description].children, 
                3,
                [Measures].[Quantity])  
        )   
on rows
from
(
select 
{
    [Calendar].[Date].&[2015-03-23T00:00:00],
    [Calendar].[Date].&[2015-03-22T00:00:00],
    [Calendar].[Date].&[2015-03-21T00:00:00]
}
ON columns

FROM [SalesReport])