Pregunta

necesito una consulta MDX que devuelve la parte superior N ciento de las filas sobre la base de una suma acumulada de una medida. La parte difícil es que el conjunto se debe pedir basado en una medida diferente que se utiliza para la suma, por lo que el uso de la función TopPercent no es posible.

Para aclarar lo que necesito, he aquí un ejemplo. Quiero comprar al menos 1000 gramos de carne en el menor número posible de paquetes. Sin embargo, no es sólo sobre el peso del paquete, quiero calidad, por lo que quiero Priorizar productos que contienen el mayor porcentaje de carne. Los productos disponibles son los siguientes:

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

Por lo tanto, para conseguir lo que quiero, me gustaría primero ordenar descender por PercentageOfMeat a conocer a mi primera prioridad. Entonces me gustaría sumar los pesos de los productos de forma acumulativa hasta que alcance el límite de 1.000 gramos. El resultado debe ser el producto 2, 4 y Producto Producto 5. Eso es bastante simple.

Pero, ¿es posible hacer esto en MDX? TopPercent (o en el caso del ejemplo, TopSum) sería de otra manera perfecta, pero no me permite utilizar diferentes medidas para la clasificación y sumando. Si quería sólo los productos que el peso de la mayoría, que funcionaría. Para citar la documentación, la función:

  

clasifica un conjunto en orden descendente, y devuelve un conjunto de tuplas con los valores más altos cuyos total acumulativo es igual o mayor que un porcentaje especificado.

Lo que necesitamos es básicamente la función TopPercent que no lo hace el conjunto especie, pero por lo que yo sé, no hay ninguno. Entonces, ¿es posible hacer lo que yo quiero o tengo para calcular esto en el código del servidor?

¿Fue útil?

Solución

¿Qué hay de la combinación de una Orden () en primer lugar para obtener sus productos ordenados en función de su porcentaje de carne y después del filtro () de acuerdo a su peso acumulado?

En [Adventure Works] el siguiente código es mostrar las bicicletas de montaña más ordenados cuyas ventas acumuladas cantidad es inferior a un cierto valor:

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]  

dando la siguiente:

                          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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top