Question

Je besoin d'une requête MDX qui retourne la partie supérieure N pour cent des lignes en fonction d'une somme cumulative d'une mesure. La partie la plus délicate est que l'ensemble doit être commandé sur la base d'une mesure différente de celle utilisée pour la somme, si vous utilisez la fonction TopPercent n'est pas possible.

Pour clarifier ce que je dois, voici un exemple. Je veux acheter au moins 1000 grammes de viande en peu de paquets que possible. Cependant, il est à peu près le poids du colis, je veux la qualité, donc je veux produits Prioriser qui contiennent le pourcentage le plus élevé de la viande. Les produits disponibles sont les suivants:

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

Alors, pour obtenir ce que je veux, je voudrais d'abord par genre PercentageOfMeat pour décroissant rencontrer ma première priorité. Ensuite, je résumerais les poids des produits cumulativement jusqu'à atteindre la limite de 1000 grammes. Le résultat devrait être produit 2, produit 4 et 5. Ce produit est assez simple.

Mais est-il possible de le faire dans MDX? TopPercent (ou dans le cas de l'exemple, TopSum) serait par ailleurs parfait, mais il ne me permet pas d'utiliser différentes mesures pour le tri et la sommation. Si je voulais seulement les produits que le poids le plus, il travaillerait. Pour citer la documentation, la fonction:

  

Trie un ensemble en ordre décroissant, et retourne un ensemble de tuples avec les valeurs les plus élevées dont le total cumulé est égal ou supérieur à un pourcentage spécifié.

Ce que je fondamentalement besoin est fonction TopPercent qui ne trie pas l'ensemble, mais pour autant que je sache, il n'y en a pas. Donc, est-il possible de faire ce que je veux ou dois-je calculer ce dans le code du serveur?

Était-ce utile?

La solution

Comment à combiner un ordre () premiers à mettre les produits classés en fonction de leur pourcentage de viande, puis le filtre () en fonction de leur poids cumulé?

Dans [Adventure Works] le code suivant montre les vélos de montagne les plus commandés dont le montant cumulé des ventes est inférieure à une certaine valeur:

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]  

donnant les éléments suivants:

                          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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top