在MDX中按维度属性订购SSRS报告

时间:2018-04-06 20:02:57

标签: sql-server reporting-services mdx olap-cube

我有MDX查询,我希望通过nPosicion对我的所有表单进行排序所以我做了类似的事情:

 //MEASURES THERE     
   ON COLUMNS,  
    NON EMPTY { (
    ORDER ([Dim BSC].[nPosicion].CURRENTMEMBER,[Dim BSC].[nPosicion].CURRENTMEMBER,BDESC) 
    *FILTER([Dim Tiempo].[Anio].CHILDREN, [Dim Tiempo].[Anio].CURRENTMEMBER  =  [Dim Tiempo].[Anio].&[2018]) 
    *FILTER([Dim Tiempo].[Mes].CHILDREN, [Dim Tiempo].[Mes].CURRENTMEMBER  =  [Dim Tiempo].[Mes].&[2])

      [Dim Tiempo].[NmontName].[NmontName].ALLMEMBERS  //etc

正如您所看到的,我使用ORDER ([Dim BSC].[nPosicion].CURRENTMEMBER,[Dim BSC].[nPosicion].CURRENTMEMBER,BDESC)来尝试订购我的工作表,但它没有任何订单。我在订单条款中遗漏了什么?此致

举报照片 enter image description here

参数图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

ORDER函数的第一个参数需要是一个集合表达式

https://docs.microsoft.com/en-us/sql/mdx/order-mdx

您已使用成员表达式作为第一个参数,因为CURRENTMEMBER返回的成员不是集合。

让我用CURRENTMEMBER

来说明你在做什么

一个非常简单的脚本:

SELECT 
  [Date].[Date].[All Periods] ON 0,
  NON EMPTY  [Product].[Product].[Product] ON 1
FROM [Adventure Works];

给出这个:

enter image description here

所以,如果我改变你的结构:

SELECT 
  [Date].[Date].[All Periods] ON 0,
  NON EMPTY  
    ORDER(
        [Product].[Product].CURRENTMEMBER,
        [Product].[Product].CURRENTMEMBER,
        BDESC
    ) ON 1
FROM [Adventure Works];

我明白了:

enter image description here

这是使用ORDER的正确方法 - 它需要一个set作为第一个参数,一个表达式按顺序排序 - 在下面我按顺序按字母顺序排序:

SELECT 
  [Date].[Date].[All Periods] ON 0,
  NON EMPTY  
    ORDER(
        [Product].[Product].[Product].MEMBERS,            //<<this returns a SET
        [Product].[Product].CURRENTMEMBER.MEMBER_CAPTION, //<<this is what will be used to decide the order
        BDESC
    ) ON 1
FROM [Adventure Works];

使用正确排序的数据返回此信息:

enter image description here

所以你有可能改成以下内容:

ORDER (
  [Dim BSC].[nPosicion].[nPosicion].MEMBERS,
  [Dim BSC].[nPosicion].CURRENTMEMBER.MEMBERVALUE, //<<you may need to try [Dim BSC].[nPosicion].CURRENTMEMBER.MEMBER_CAPTION
  BDESC
) 

我还注意到你的mdx中的其他错误:

FILTER(
    [Dim Tiempo].[Anio].CHILDREN, 
    [Dim Tiempo].[Anio].CURRENTMEMBER  =  [Dim Tiempo].[Anio].&[2018]
)

您需要将=更改为IS

FILTER(
    [Dim Tiempo].[Anio].CHILDREN, 
    [Dim Tiempo].[Anio].CURRENTMEMBER  IS  [Dim Tiempo].[Anio].&[2018]
)

虽然为什么要烦恼过滤器,只需更换以下内容:

{ [Dim Tiempo].[Anio].&[2018] }