我有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)
来尝试订购我的工作表,但它没有任何订单。我在订单条款中遗漏了什么?此致
参数图片:
答案 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];
给出这个:
所以,如果我改变你的结构:
SELECT
[Date].[Date].[All Periods] ON 0,
NON EMPTY
ORDER(
[Product].[Product].CURRENTMEMBER,
[Product].[Product].CURRENTMEMBER,
BDESC
) ON 1
FROM [Adventure Works];
我明白了:
这是使用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];
使用正确排序的数据返回此信息:
所以你有可能改成以下内容:
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] }