代码之家  ›  专栏  ›  技术社区  ›  Carlos

计算MDX中的累积和

  •  1
  • Carlos  · 技术社区  · 15 年前

    我需要一个MDX查询,它根据度量值的累计和返回前N%的行。棘手的部分是,集合必须基于与用于求和不同的度量来排序,因此使用 TopPercent 功能不可用。

    || Name      || Weight || PercentageOfMeat ||
    | Product 1  | 500     |  20               |
    | Product 2  | 250     |  60               |
    | Product 3  | 1000    |  25               |
    | Product 4  | 400     |  50               |
    | Product 5  | 400     |  40               |
    

    所以,为了得到我想要的东西,我会首先按食物的百分比进行递减排序,以满足我的首要任务。然后我将产品的重量累加起来,直到达到1000克的极限。结果应该是产品2、产品4和产品5。这很简单。

    最高 (或就本例而言, TopSum )否则是完美的,但它不允许我用不同的方法来分类和总结。如果我只想要最重的产品,那就行了。引用文档时,函数:

    按降序对集合排序,并返回一组具有最高值的元组,这些元组的累计总数等于或大于指定的百分比。

    函数不排序集合,但据我所知,没有。那么,有没有可能做我想做的或者我必须在服务器代码中计算这个呢?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Marc Polizzi    15 年前

    不如先组合一个Order(),让你的产品按照它们的肉的百分比来分类,然后再根据它们的累计重量来过滤它们?

    在[Adventure Works]中,以下代码显示了累计销售额低于某个特定值的订购量最大的山地车:

    with 
    
       set [mbikes] as order( [Product].[Product Categories].[mountain bikes].children, [order count], BDESC ) 
    
    select 
    
        { [order count], [sales amount] } on 0,
    
        filter( [mbikes], sum( subset( [mbikes], 0, [mbikes].currentOrdinal ), [sales amount] ) < (8 * 1000 * 1000)  ) on 1 
    
    from [adventure works]  
    

                              Order Count    Sales Amount
    Mountain-200 Black, 38          743      $2,589,363.78
    Mountain-200 Black, 42          671      $2,265,485.38
    Mountain-200 Silver, 38         641      $2,160,981.60