我需要一个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               |

因此,为了获得我想要的东西,我首先要按照百分比来达到我的首要任务。然后,我将累积产品的重量总和,直到达到1000克极限为止。结果应该是产品2,产品4和产品5。这很简单。

但是可以在MDX中这样做吗? TopPercent (或在示例的情况下, TopSum)否则将是完美的,但是它不允许我使用不同的措施进行分类和总结。如果我只想最大的产品,它将起作用。为了引用文档,该功能:

按降序排列一个集合,并返回一组具有最高值的元素,其累积总数等于或大于指定百分比。

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

有帮助吗?

解决方案

首先将订单()首先组合起来,以根据其肉的百分比对产品进行排序,然后根据其累积重量过滤()?

在[冒险工作]中,以下代码显示了有序的山地自行车,其累计销售额较低至一定价值:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top