1

我需要一个 MDX 查询,它根据度量的累积总和返回前 N% 的行。棘手的部分是集合必须基于与用于求和的不同度量来排序,因此TopPercent无法使用该函数。

为了澄清我需要什么,这里有一个例子。我想以尽可能少的包装购买至少 1000 克的肉。然而,这不仅仅是包装的重量,我想要质量,所以我想要优先考虑肉类含量最高的产品。可用产品如下:

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

所以,为了得到我想要的东西,我会首先按 PercentageOfMeat 降序排序以满足我的首要任务。然后我会累积产品的重量,直到达到 1000 克的限制。结果应该是产品 2、产品 4 和产品 5。这很简单。

但是有可能在 MDX 中做到这一点吗?TopPercent(或者在示例的情况下,TopSum)否则将是完美的,但它不允许我使用不同的度量进行排序和求和。如果我只想要最重的产品,它会起作用。引用文档,函数:

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

我基本上需要的是TopPercent不对集合进行排序的功能,但据我所知,没有。那么有可能做我想做的事还是我必须在服务器代码中计算这个?

4

1 回答 1

5

如何先组合 Order() 以根据肉类的百分比对产品进行分类,然后根据累积重量对它们进行 Filter() ?

在 [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
于 2010-09-11T13:02:03.963 回答