2017-08-22 1 views
0

Dans Excel Powerquery j'ai une instruction MDX pour interroger un service d'analyse. J'ai essayé d'introduire une fonction iif (que je comprends devrait fonctionner comme une instruction if/else), mais tout ce qu'elle fait est de filtrer les résultats.Si l'instruction dans l'instruction MDX

Voici un échantillon de mon instruction MDX raccourci pour des raisons de lisibilité et de confidentialité..

SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, NON EMPTY { (
    [Account Information].[Name].[Name].ALLMEMBERS 
    * ........ 
    * iif([Service].[Level 3] = [Service].[Level 3].[Linux],[Service].[Level 3].[Linux], [Service].[Level 2])) } 
DIMENSION PROPERTIES MEMBER_CAPTION,MEMBER_UNIQUE_NAME ON ROWS FROM (SELECT ({ 
[Geography].[Subsidiary].&[France] }) 
ON COLUMNS FROM (SELECT ({ [Calendar].[Fiscal Date Hierarchy].[Fiscal Semester].&[FY18-H1] }) 
ON COLUMNS FROM [Model])) WHERE ([Calendar].[Fiscal Date Hierarchy].[Fiscal Semester].&[FY18-H1], [Geography].[Subsidiary].&[France]) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS 

Le bon résultat est maintenant que toutes les lignes sont filtrées sur [Service] [Niveau 3] [Linux ].

Le résultat est que je veux qu'une colonne est ajoutée à la suite [linux] le cas échéant à cette ligne ou [service]. [Niveau 2] dans tous les autres cas.

+1

Vous ne savez pas exactement ce que votre condition iif devrait faire. Pourriez-vous s'il vous plaît fournir un exemple de style sql ou quelque chose d'autre à réimplémenter pour vous? –

Répondre

0

Cela ne semble pas correct pour moi:

iif(
    [Service].[Level 3] = [Service].[Level 3].[Linux] 
,[Service].[Level 3].[Linux] 
,[Service].[Level 2] 
) 

Si vous comparez membres mdx pour l'égalité nous alors l'opérateur IS plutôt que =:

iif(
    [Service].[Level 3] IS [Service].[Level 3].[Linux] 
,[Service].[Level 3].[Linux] 
,[Service].[Level 2] 
) 

Mais cette condition sera [Service].[Level 3] IS [Service].[Level 3].[Linux] renvoie toujours False, vous devez donc probablement utiliser le contexte via la fonction CURRENTMEMBER:

iif(
    [Service].CURRENTMEMBER IS [Service].[Level 3].[Linux] 
,[Service].[Level 3].[Linux] 
,[Service].[Level 2] 
) 

mais je ne vois pas comment cela correspond on rows .... pas beaucoup d'aide

Pourquoi ne pouvez-vous nous donner toute la requête ?! La section marquée * ........ * ne nous aide pas à vous aider