2016-03-07 41 views
-1

我试图按“销售”降序排列,但我的代码无法正常工作,因此我试图按每个“城市”获得销售额排名前五位的产品。 查询查找每个产品的前5个产品,但不是前5个,并且ORDER DESC也不起作用。我使用蒙德里安。有任何想法吗?在MDX中订单和限制结果

enter image description here

 
WITH 
    SET [PRODUCTS] AS 
     Head(
      ORDER(Filter([Product].[Product].Members, not isEmpty([Measures].[Sales])),[Measures].[Sales], DESC) 
     ,5 
     ) 
SELECT 
    NON EMPTY {[Measures].[Sales]} ON COLUMNS, 
    NonEmptyCrossJoin([Markets].[City].Members, [PRODUCTS]) ON ROWS 
FROM 
    [SteelWheelsSales] 

回答

1

下面是针对AdvWrks类似于您的情况为例:

WITH 
    SET [AllCountries] AS [Country].[Country].MEMBERS 
    SET [AllStates] AS [State-Province].[State-Province].MEMBERS 
    SET [Top2States] AS 
    Generate 
    (
     [AllCountries] 
    ,TopCount 
     (
     (EXISTING 
      [AllStates]) 
     ,3 
     ,[Measures].[Internet Order Count] 
    ) 
    ) 
    MEMBER [State-Province].[All].[RestOfCountry] AS 
    Aggregate({(EXISTING {[AllStates]} - [Top2States])}) 
SELECT 
    {[Measures].[Internet Order Count]} ON COLUMNS 
,{ 
     [AllCountries] 
    * 
     { 
     [Top2States] 
     ,[State-Province].[All].[RestOfCountry] 
     ,[State-Province].[All] 
     } 
    } ON ROWS 
FROM [Adventure Works]; 

它提供了以下结果:

enter image description here

所以,如果我试图适应上面的一个d简化它,因为你不需要RestOf..类别我得到这样的东西:

WITH 
    SET [AllCities] AS [Markets].[City].MEMBERS 
    //SET [AllPRODUCTS] AS NONEMPTY([Product].[Product].MEMBERS, [Measures].[Sales]) 
    //alternative if NonEmpty not implemented in Mondrian.. 
    SET [AllPRODUCTS] AS 
    FILTER(
     [Product].[Product].MEMBERS 
     ,not isEmpty([Measures].[Sales]) 
    ) 
    SET [Top5PRODUCTS] AS 
    Generate 
    (
     [AllCities] 
    ,TopCount 
     (
     (EXISTING 
      [AllPRODUCTS]) 
     ,5 
     ,[Measures].[Sales] 
    ) 
    ) 
SELECT 
    NON EMPTY 
    {[Measures].[Sales]} ON COLUMNS 
, 

    [AllCities] 
    *[Top5PRODUCTS] 
    ON ROWS 
FROM [SteelWheelsSales]; 
+0

谢谢。不幸的是,这个脚本不适用于我的Pentaho - Saiku Analytics界面(使用mondrian 3模式)。错误是:MondrianException:Mondrian错误:第11行第11列的语法错误标记'[AllPRODUCTS]'。 - 看起来NONEMPTY()和EXISTING在SET中不被接受。我用FILTER()函数替换它,然后[Top5PRODUCTS]集返回0行。 –

+0

@ElizaM是否在Mondrian内实施?这个配方取决于它的功能。 – whytheq

+0

SET在mondrian中没有实现EXISTING。 “MondrianException:Mondrian错误:第17行第11列的语法错误,标记'[AllPRODUCTS]'” –