Sorting mdx查询中的动态排序始终基于上个月
我正在处理另一个MDX问题,这次我找不到该问题的解决方案: 我需要根据上个月的情况对一些结果进行排序,但我不知道最后一个月是哪一个月。这取决于查询Sorting mdx查询中的动态排序始终基于上个月,sorting,filter,mdx,Sorting,Filter,Mdx,我正在处理另一个MDX问题,这次我找不到该问题的解决方案: 我需要根据上个月的情况对一些结果进行排序,但我不知道最后一个月是哪一个月。这取决于查询 SELECT {[Measures].[MQ]} ON COLUMNS, ORDER( FILTER( [dim_ProductModel].[Product Model].&[DSDC] * [dim_SpareParts].[Sp
SELECT
{[Measures].[MQ]} ON COLUMNS,
ORDER(
FILTER(
[dim_ProductModel].[Product Model].&[DSDC]
*
[dim_SpareParts].[Spare Group].children,
([Measures].[MQ]) > 0
),
([Dim_Date].[Date Full].&[2013-12-01],[Measures].[MQ]) ,
desc
)
*
[Dim_Date].[Date Full].children
ON ROWS
FROM
(
SELECT
BOTTOMCOUNT(
{FILTER(
EXCEPT(
[Dim_Date].[Date Full].children,
{[Dim_Date].[Date Full].UNKNOWNMEMBER}
),
([Measures].[MQ]) > 0
)},
7) ON COLUMNS
FROM
[cub_sfr_spare_parts_groups]
WHERE
([dim_ProductModel].[Product Model].&[DSDC])
)
问题是,只有在最后一个月是2013-12年的情况下,才能正确排序。否则,如果2013-12不存在,则应用字母排序
现在,我可以使用TAIL([Dim_Date].[Date Full].children,1)获取上个月的数据,但是,在我的order子句中不允许使用它。他的意思是我应该给他提供一个字符串/文字表达式,而不是元组表达式,不过,带1作为2.parameter的TAIL只给我一个结果
有没有办法把这个元组表达式转换成字符串表达式?
或任何其他选项如何按最后日期排序
如果我使用.lastchild,这对我没有帮助,因为lastchild不是我需要的最后一个非空月份。(非空(.lastchild)也不工作)
非常感谢您的帮助
如您所见,Tail
返回一个集合。可以使用函数从集合中获取元组,并使用函数从元组中获取成员。然后,可以在过滤器定义的元组中使用此选项
因此,您要使用的表达式是
Tail([Dim_Date].[Date Full].children, 1).Item(0).Item(0)
或者,甚至更好(见)
首先感谢您(像往常一样)结构良好的回答。现在,排序工作几乎正常。只要我在打开过滤器后立即删除[dim_ProductModel].[Product Model].&[DSDC]属性,它就可以工作。否则按字母顺序排序。奇怪的行为,如果我在排序中使用“硬编码”日期成员([Dim_date]。[date Full]。&[2013-12-01]),那么它也适用于属性。我将进一步检查它Peter 10分钟前有趣的是,如果我删除[dim_ProductModel].[Product Model].&[DSDC]并在查询结束时将其放入新的WHERE条件,排序也不起作用。不……当我想为产品模型添加过滤器时,它根本不起作用,但是没有产品模型过滤器,它就可以正常工作。这种行为有什么解释吗?例如,当我将产品模型添加到WHERE或筛选表达式TAIL([Dim_Date].[Date Full].children,1)时,在应用order by后进行计算?也许您应该在
order
中用BDESC
替换(请参见)?不幸的是,这也没有帮助。难道我不能提前计算最后一个月,将其存储到一个变量中,然后在排序部分使用该变量吗?
Tail([Dim_Date].[Date Full].Members, 1).Item(0).Item(0)