2010-04-22 20 views
0

Je suis nouveau sur MDX et j'ai un problème avec le filtrage des valeurs d'une sommation.Récapitulatif sélectif MDX pour un problème de normalisation

Nous voulons effectuer des calculs de normalisation, en particulier une quantité (q) divisée par une base (b) pour obtenir une intensité (I). La formule est assez simple I = q/b.

NOTRE STRUCTURE CUBE:

Nous avons des tables de fait FactQuantity et FactBasis, dont chacun sont liés à notre table de dimension DimOrg et DimTime. Les deux dimensions ont des hiérarchies: les mois sont cumulés en années dans DimTime et les emplacements sont regroupés en unités commerciales et groupes dans DimOrg. Les tables de faits ne sont pas synchronisées: simplement parce qu'une quantité existe pour un org_id et un temps particuliers, il n'est pas garanti qu'il existe une base pour ce même org_id et cette heure.

MON TENTATIVE UNE SOLUTION:

La forme de base du membre calculé est facile:.. [mesures] [Quantité]/[mesures] [Base]

Cela fonctionne bien lorsque nous considérons au niveau le plus bas des deux dimensions, mais les problèmes surviennent lorsque vous retrouvez les dimensions et commencez à agréger.

Le problème est que les valeurs de quantité qui n'ont pas de valeur de base correspondante au même moment et au même endroit sont incluses, ce qui rend le numérateur trop grand et donc incorrect.

EXEMPLE RAPIDE:

ORG_ID 001 dans le groupe A a une base 100 et une quantité de 1000, de sorte que son intensité est calculée 1000/100 = 10. Bien jusqu'à présent. org_id 002 également dans le groupe A n'a pas de base, mais il a une quantité de 2000, de sorte que son intensité calculée des erreurs. Bien. L'addition au groupe A correspond à la quantité (3000) et à la base (100), ce qui laisse une intensité calculée de 30, ce qui est incorrect pour le groupe. L'année 2000 aurait dû être exclue car elle n'avait pas de valeur de base correspondante pour le même org_id et l'heure.

Toute aide que vous pouvez offrir est très appréciée.

Merci,

Répondre

2

Deepak Puri answered this sur les forums MSDN:..

En supposant que [DimOrg] [Localisation] et [DimTime] [Mois] sont les attributs de niveau feuille pour le 2 dimensions, vous pourriez résumer les [mesures] numérateur [Quantité] que sur les feuilles avec une base, comme:.

Sum(NonEmpty(existing [DimOrg].[Location].[Location].Members * [DimTime].[Month].[Month].Members, [Measures].[Basis]), [Measures].[Quantity]) /[Measures].[Basis]