2016-04-04 38 views
0

Bir SSAS Cube ve Datazen (gösterge tablosu yaratıcısı) ile çalışıyorum.MDX Sorguların katları ve boş değerlere sahip parametreleri

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

StatutCode: Ben 3 parametrelerle (valueCode 'AZE' için) veri görünümünü ettik ' A', 'B', 'C', 'd', ...

NiveauCode: 'X', 'Y', 'W', ... Bu sorgu ile

zaman Her biri için birden çok değer veya sadece bir değer kullanırım, çalışır. Ancak, parametrenin değeri boş olduğunda, sorgu için bir parametre için tüm değerleri döndürmesini isterim.

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] 
    ) 
:

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

Bu sorgu, bir veya daha fazla değerler için çalışır: Ben IsEmpty (@param), IsEmpty (STRTOSET (@param)) ... ama bu hata döndürür test ettik

Neyi değiştirmek zorundayım?

DÜZENLEME: Eğer geçerli mdx temsil eden bir dize sağlamanız gerekmektedir strToMemberstrToSet kullanırken veya

) (

strtoset test etmek için iyi bir çözüm

isError() 

cevap

1

olduğunu örneğin, bunlar tamam:

strToSet("[AgeClassCode].[AgeClassCode].members") 

strToMember("[AgeClassCode].[AgeClassCode].[AGE01]") 
Bu NULL olarak geçerli değildir

temsil eden bir dize veya bir şey değildir mdx:

İstemcinizdeki Eğer BOŞ size dönüştürmek için gereken her nasılsa sonra tüm üyelerini temsil etmek istiyorum Yani eğer
strToSet(NULL) 

NULL bir "[AgeClassCode]. [AgeClassCode] .members" dizesine strToSet vurur önce.

+0

Yazılımda değiştirmenin bir yolu yok, benim boyutuma göre seçim listesi navigator. Hiçbir değer seçilmediğinde hata görünür. Ayrıca AgeClassCode parametresini şu şekilde değiştirmeyi deniyorum: 'IIF (ISEMPTY ('{{@AgeClassCode}}'), [AgeClass]. [AgeClassCode] .Members, STRTOSET ('{{@AgeClassCode}} ')) ' Ve ben de buradaki tümceyi sildim, ama yine de aynı hata. – Huojian

+0

Üzgünüm ama datazen arayüzü ile oynamam. Geçerli bir MDX dizgisini strToSet veya strToMember içine beslemeniz gerekir - böylece hiçbir şey istiyorsanız {}} öğesinde beslemeyi deneyin veya her üyeyi [AgeClassCode] gibi bir şey istiyorsanız [AgeClassCode]. [AgeClassCode] .members'. StrToSet, strToMember veya ISEMPTY içine NULL beslemesi başarısız olur. ISEMPTY argümanı olarak geçerli bir mdx ifadesine ihtiyaç duyar. – whytheq