2017-08-28 2 views
0

Je suis assez nouveau pour MDX et j'ai écrit une requête MDX de base qui renvoie une mesure, ainsi que la hiérarchie complète de ma dimension produit:filtrer un membre spécifique d'une hiérarchie de dimension dans MDX requête

SELECT {[Measures].[Amount]} on 0, 
{ 
DESCENDANTS([ProductH].[ProductH], [ProductH].[ProductH].[Lvl4], LEAVES) 
} 
ON 1 
FROM 
(
    SELECT 
    {StrToSet('[AccountH].[AccountH].[Lvl1].&[TST17:0]',CONSTRAINED)} ON COLUMNS 
    FROM 
    (
    SELECT 
     {StrToSet('[ProductH].[ProductH].[All]',CONSTRAINED)} ON COLUMNS 
    FROM [Model] 
) 
) 

Cela retourne le jeu de résultats pour mon rapport SSRS qui est essentiellement le montant pour tous les niveaux dans la dimension produit pour la hiérarchie de compte de l'utilisateur

Maintenant, je veux exclure de cet ensemble les montants sous le 2ème niveau de la hiérarchie de compte avec le nom spécifique "Exclure". J'ai réussi à ajouter ce filtre à l'aide Crossjoin et sauf - basé sur le nom unique de nœud compte:

[AccountH].[AccountH].[Lvl2].&[TST17:0]&[TST17:1000] 

mais je veux plus particulièrement de filtrer en fonction du nom, démettre les montants où:

[AccountH].CURRENTMEMBER.MEMBER_CAPTION = "Exclude" 

Comment filtrer en fonction du nom du noeud de la hiérarchie?

+0

avez-vous essayé la fonction de filtre? – whytheq

+0

Oui à la fois c'est le même problème, il semble que je ne peux pas spécifier le nom du noeud là, quand je fais le noeud n'est pas supprimé –

Répondre

0

La clause Where doit être assez:

select 
... 
from [Model] 
where ({[AccountH].[AccountH].Members - [AccountH].[AccountH].[Exclude]}) 
+0

AccountH est une hiérarchie, je ne peux pas obtenir le membre "exclure" en utilisant simplement son nom visible Je comprends –

+0

Pourquoi pas? Essayez: sélectionnez {[AccountH]. [AccountH] .Members - [AccountH]. [AccountH]. [Exclure]} sur 0 dans [Modèle] –

+0

sélectionnez [AccountH]. [AccountH]. [Exclure] fonctionne, j'ai un membre avec ce nom. Cependant la suppression du membre ne fonctionne pas, j'ai essayé à la fois votre version et la spécification. [Lvl2] ... –

0

Je l'ai pensé à elle avec un peu d'aide, les nœuds de compte « Ne comptez pas » ne sont pas uniques dans la hiérarchie, même au même niveau (niveau 2 pour moi) , donc en les supprimant de manière apparente avec EXCEPT() ne fonctionne pas. Cela fonctionne cependant:

Filter([AccountH].[AccountH].[Lvl2]].Members 
     ,[AccountH].[AccountH].CURRENTMEMBER.MEMBER_CAPTION <> "Exclude") 

car il vérifie le nom. Mais apparemment, la fonction de filtrage est lente, donc je vais avec une croix joindre compte * produit, puis en supprimant les comptes "Exclure" dans le rapport SSRS