2016-04-04 11 views
0

Ich arbeite mit einem SSAS Cube und Datazen (Dashboard Creator). Ich habe eine Datensicht (für die valueCode 'AZE') mit 3 Parametern:MDX Abfrage mit Parametern mit mehreren Werten und Nullwert

AgeClassCode: 'AGE01', 'AGE02', 'AGE03', ...

StatutCode: ' A‘, 'B', 'C', 'D', ...

NiveauCode: 'X', 'Y', 'W', ...

Mit dieser Abfrage, wenn Ich benutze mehrere Werte oder nur einen Wert für jeden, es funktioniert. Aber ich möchte, dass die Abfrage alle Werte für einen Parameter zurückgibt, wenn der Wert des Parameters null ist. Ich habe getestet isEmpty (@param), isEmpty (StrToSet (@param)), ... aber das diesen Fehler zurückgibt:

An mdx expression was expected. An empty expression was specified.

Diese Abfrage funktioniert für einen oder mehrere Werte:

SELECT 
    NON EMPTY 
    { 
     [Measures].[Value], [Measures].[PreviousValueYear], [Measures].[PreviousValueReportMonth] 
    } ON COLUMNS, 
    NON EMPTY 
    { 
     NONEMPTY 
     (
      [EntiteFederal].[ServiceCode].[ServiceCode].ALLMEMBERS * 
      [EntiteFederal].[EntiteCode].[EntiteCode].ALLMEMBERS * 
      [ReportMonth].[ReportMonth].[ReportMonth].ALLMEMBERS * 
      [T].[Year].[Year].ALLMEMBERS 
     ) 
    } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    FROM 
    ( 
      SELECT ({ [ValueType].[ValueCode].&[AZE] }) ON COLUMNS 
      FROM (
        SELECT (STRTOSET('{{ @AgeClassCode }}')) ON COLUMNS 
        FROM ( 
          SELECT (STRTOSET('{{ @NiveauCode }}')) ON COLUMNS 
          FROM 
          ( 
           SELECT ((STRTOSET('{{ @StatutCode }}')) ON COLUMNS 
           FROM [MyCube] 
          ) 
         ) 
       ) 
    )      
    WHERE 
    ( 

     IIF(STRTOSET('{{ @StatutCode }}').Count = 1, STRTOSET('{{ @StatutCode }}'), [Statut].[StatutCode].currentmember), 
     IIF(STRTOSET('{{ @NiveauCode }}').Count = 1, STRTOSET('{{ @NiveauCode }}'), [Niveau].[NiveauCode].currentmember), 
     IIF(STRTOSET('{{ @AgeClassCode }}').Count = 1, STRTOSET('{{ @AgeClassCode }}'), [AgeClass].[AgeClassCode].currentmember), 
     [ValueType].[ValueCode].&[AZE] 
    ) 

Was muss ich ändern?

EDIT:

die StrToSet Um zu testen,()

ist die gute Lösung die

isError() 

Antwort

1

Wenn strToSet mit oder strToMember Sie benötigen einen String zu liefern, die gültige mdx darstellt also zum Beispiel sind diese in Ordnung:

Dies als NULL nicht gültig ist kein String, oder etwas, das MDX darstellt:

strToSet(NULL) 

wenn also in der Client Sie NULL möchten, dass alle Mitglieder zu haben, dann irgendwie müssen Sie verwandeln die NULL zu einer Zeichenfolge "[AgeClassCode]. [AgeClassCode] .members", bevor es strToSet erreicht.

+0

Es gibt keine Möglichkeit, es in der Software zu ändern, es ist Auswahlliste Navigator basierend auf meiner Dimension. Der Fehler tritt auf, wenn kein Wert ausgewählt ist. Ich habe auch versucht, den Parameter AgeClassCode wie folgt zu ändern: 'IIF (ISEMPTY ('{{@AgeClassCode}}'), [AlterKlasse]. [AgeClassCode] .Members, STRTOSET ('{{@AgeClassCode}} ')) ' Und ich habe die WHERE-Klausel gelöscht, aber immer noch den gleichen Fehler. – Huojian

+0

Es tut mir leid, aber ich habe nicht mit der Schnittstelle von Datazen gespielt. Sie müssen gültige MDX-Strings in strToSet oder strToMember einspeisen - wenn Sie also nichts wollen, versuchen Sie es mit '{}' oder wenn Sie möchten, dass jedes Mitglied etwas wie '[AgeClassCode]. [AgeClassCode]. [AgeClassCode] .members 'hat. Füttern NULL in StrToSet, StrToMember oder ISEMPTY werden alle fehlschlagen. ISEMPTY benötigt einen gültigen mdx-Ausdruck als Argument. – whytheq