基于上个月的mdx查询中的动态排序

时间:2014-03-25 08:44:02

标签: sorting filter mdx

我正在处理另一个MDX问题,这次我找不到解决这个问题的方法: 我需要根据上个月对某些结果进行排序,但我不知道哪个月是最后一个月。这取决于查询

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)获得上个月,但是,不允许在我的订单子句中使用它。他的意思是我应该为他提供一个字符串/文字表达而不是一个元组表达式,尽管TAIL用1作为2.parameter只给我一个结果!

有没有办法将这个元组表达式转换为字符串表达式? 或者任何其他选项如何按最后日期排序?

如果我使用.lastchild这不会帮助我,因为最后一个孩子不是我需要的最后一个非空月。 (NONEMPTY(.lastchild)工作不正常)

非常感谢您提供任何帮助,

此致

1 个答案:

答案 0 :(得分:0)

正如您所见in the documentationTail会返回一个集合。您可以使用set to tuple version of the Item函数从集合中获取元组,使用tuple to member version of the Item函数从元组中获取成员。然后,可以在过滤器定义中的元组中使用它。

因此,您要使用的表达式为

Tail([Dim_Date].[Date Full].children, 1).Item(0).Item(0)

或更好(见this question

Tail([Dim_Date].[Date Full].Members, 1).Item(0).Item(0)