2010-09-10 5 views
2

je dans une requête MDX du membre calculé suivant:Utilisation d'EXCEPT dans un membre calculé

MEMBER [Asset].[Class].[Fixed Income Derivatives (Inflation Linked)] 
AS 
(
    [Asset].[Class].&[Fixed Income], 
    [Asset].[Sub Class].&[Derivatives], 
    [Asset].[Sub Class Type].&[Inflation] 
) 

C'est utilisé dans une requête comme suit:

SELECT 
{ 
    [Measures].[Market Value] 
} ON 0, 
NON EMPTY(
{ 
    [Asset].[Class].[Fixed Income Derivatives (Inflation Linked)] 
} ON 1 
FROM [Asset] 

Cela fonctionne très bien, et bien sûr donne moi la valeur marchande de tous les dérivés à revenu fixe liés à l'inflation.

J'essaie maintenant d'ajouter un deuxième membre calculé, cette fois pour me donner tous les derviatifs à revenu fixe qui sont NON indexés sur l'inflation. Je pensais que ce serait aussi facile que d'un EXCEPT dans un second membre comme ceci:

MEMBER [Asset].[Class].[Fixed Income Derivatives (Non Inflation Linked)] 
AS 
(
    [Asset].[Class].&[Fixed Income], 
    [Asset].[Sub Class].&[Derivatives], 
    EXCEPT(
     [Asset].[Sub Class Type].[Sub Class Type], 
     [Asset].[Sub Class Type].&[Inflation] 
    ) 
) 

Hélas, pas de chance - il donne l'erreur

La fonction attend une chaîne ou une expression numérique pour la argument. Une expression d'ensemble de tuples était utilisée.

Ce qui est un message confus, mais par pour le cours dans SSAS. Je suis sûr que je suis sur la bonne voie, et j'ai juste le SAUF un peu faux, mais je ne peux pas pour la vie de moi repérer le problème.

Répondre

4

Vous avez juste besoin d'utiliser la fonction Aggregate pour atteindre votre objectif sans avoir d'erreur.

Modifiez la définition de membre calculée comme ci-dessous;

MEMBER [Asset].[Class].[Fixed Income Derivatives (Non Inflation Linked)] 
AS 
(
    Aggregate 
    (
     {[Asset].[Class].&[Fixed Income]} * 
     {[Asset].[Sub Class].&[Derivatives]} * 
     EXCEPT 
     (
     [Asset].[Sub Class Type].[Sub Class Type], 
     [Asset].[Sub Class Type].&[Inflation] 
     ) 
     ,Measures.CurrentMember 
    ) 
) 
+1

Merci beaucoup pour cette réponse. Ça m'a dérangé pendant des semaines. – Jamiec