不使用选择中的集合的MDX总和最大值

时间:2013-12-16 21:29:44

标签: sum max ssas mdx

对不起这个奇怪的问题标题,我很难说出我想要完成的事情。

我有一个OrderLine Fact表。每行都有一个产品(Category / SubCategory / Product)。我需要一个度量来返回在ProductCategory中有一个或多个Orderlines的Orders(而不是OrderLines)的数量。由于Order Fact Table未链接到Product,我必须从OrderLine Fact Table获取此数据。

我对MDX的了解相当有限,根据我的想法,我发现的只是为每个OrderLine设置“订单数量”(1或-1)度量,并且在OrderLumber中具有退化维度OrderLine表。有了这个,我想我可以在OrderLine Fact Table中获得OrderNumber的“订单数量”的MIN。它有效:

WITH MEMBER [Measures].[Test] AS 
    SUM([Order Number].[Order Hierarchy].CURRENTMEMBER, MIN([Order Number].[Order Hierarchy].CURRENTMEMBER.CHILDREN, [Measures].[Number of Orders]))
    SELECT
        {[Measures].[Number of Orders],[Measures].[Test]} ON 0,
        {[Order Number].[Order Number].&[110100000030-BLA-01745892],[Order Number].[Order Number].&[110100000031-BLA-0]} ON 1
    FROM SalesCube

对于包含3行的订单,[Measures].[Number of Orders]将返回3,[Measures].[Test]则返回1。

我现在的问题是,如果我想按产品类别执行此查询:

WITH MEMBER [Measures].[Test] AS 
        SUM([Order Number].[Order Hierarchy].CURRENTMEMBER, MIN([Order Number].[Order Hierarchy].CURRENTMEMBER.CHILDREN, [Measures].[Number of Orders]))
        SELECT
            {[Measures].[Number of Orders],[Measures].[Test]} ON 0,
            {[Products].[Category Hierarchy].MEMBERS} ON 1
        FROM SalesCube

它给了我所有OrderLines的MIN,它是(-1)并将它加到-1。我需要的是查询返回包含产品类别的每个“订单号”的最小“订单数量”的总和,而不必使用行轴上的“订单号”。

这有意义吗?

1 个答案:

答案 0 :(得分:1)

据我所知,对此进行建模的最佳方法是在订单行事实表中添加“订单ID”,并在其上定义一个不同的计数作为度量[Measures].[Order Count]。那时应该不需要复杂的MDX。

如果您需要用-1减去订单,也许您可​​以将-11转换为具有用户可读值的属性,例如“已放置”和“已撤消”。然后“订单计数”度量将变得不可见,并且向用户显示计算的度量,其将实现如下:

([Measures].[Order Count], [Order].[Order Status].[placed]) -
([Measures].[Order Count], [Order].[Order Status].[reversed])