计算MDX中的累计和

Car*_*los 1 ssas mdx cumulative-sum

我需要一个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               |
Run Code Online (Sandbox Code Playgroud)

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

但是在MDX中可以这样做吗?TopPercent(或者在示例的情况下,TopSum)否则将是完美的,但它不允许我使用不同的度量来进行排序和求和.如果我只想要最重的产品,那就行了.引用文档,功能:

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

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

Mar*_*zzi 5

如何组合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]  
Run Code Online (Sandbox Code Playgroud)

给出以下内容:

                          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
Run Code Online (Sandbox Code Playgroud)