2016-09-09 3 views
0

Ich bin sehr neu in dieser ganzen MDX-Abfrage-Sache. Ich habe die folgende Abfrage, die ich ausführen versuche aber halten die folgende Fehlermeldung erhalten:Die STRTOSET-Funktion erwartet einen String oder einen numerischen Ausdruck für das Argument 1. Ein Tuple-Set-Ausdruck wurde verwendet

Executing the query ... Query (19, 16) The STRTOSET function expects a string or numeric expression for the 1 argument. A tuple set expression was used. Execution complete

Meine Abfrage sieht wie folgt aus:

SELECT 
NON EMPTY { [Measures].[Effective Duration] } ON COLUMNS, 
NON EMPTY { (
       [Dim Cause Code].[Cause].[Cause].ALLMEMBERS * 
       [Dim Classification].[Classification].[Classification].ALLMEMBERS * 
       [Dim Date 1].[Full Date Alternate Key].[Full Date Alternate Key].ALLMEMBERS * 
       [Dim Location 1].[Work Center Name].[Work Center Name].ALLMEMBERS * 
       [Fact Process Downtime].[Start Datetime].[Start Datetime].ALLMEMBERS * 
       [Fact Process Downtime].[End Datetime].[End Datetime].ALLMEMBERS * 
       [Fact Process Downtime].[Id].[Id].ALLMEMBERS) 
      } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM ( 
    SELECT (STRTOSET({[Fact Process Downtime].[Is Virtual].&[False]}, CONSTRAINED)) ON COLUMNS 
    FROM ( 
      SELECT (STRTOSET({[Dim Location 1].[Work Center].&[South32 Manganese.Mamatwan.DMS]}, CONSTRAINED)) ON COLUMNS 
      FROM ( 
        SELECT (STRTOSET({[Dim Classification].[Classification].&[Scheduled Process]}, CONSTRAINED)) ON COLUMNS 
        FROM ( 
          SELECT (STRTOSET({[Dim Date 1].[Month Fiscal Year].&[Jul/17]}, CONSTRAINED)) ON COLUMNS FROM [FactDownTime])))) WHERE ( 
    IIF(STRTOSET({[Dim Date 1].[Month Fiscal Year].&[Jul/17]}, CONSTRAINED).Count = 1, STRTOSET({[Dim Date 1].[Month Fiscal Year].&[Jul/17]}, CONSTRAINED), [Dim Date 1].[Month Fiscal Year].currentmember), 
    IIF(STRTOSET(STRTOSET({[Dim Location 1].[Work Center].&[South32 Manganese.Mamatwan.DMS]}, CONSTRAINED).Count = 1, STRTOSET(STRTOSET({[Dim Location 1].[Work Center].&[South32 Manganese.Mamatwan.DMS]}, CONSTRAINED), [Dim Location 1].[Work Center].currentmember), 
    IIF(STRTOSET({[Fact Process Downtime].[Is Virtual].&[False]}, CONSTRAINED).Count = 1, STRTOSET({[Fact Process Downtime].[Is Virtual].&[False]}, CONSTRAINED), [Fact Process Downtime].[Is Virtual].currentmember) 
))) 

Antwort

3

Sie müssen Strings in dieser Funktion StrToSet liefern ist die Abkürzung für "String Set"

https://msdn.microsoft.com/en-us/library/ms144782.aspx

das ist also falsch:

STRTOSET({[Fact Process Downtime].[Is Virtual].&[False]}, CONSTRAINED) 

Aber das ist richtig

STRTOSET('{[Fact Process Downtime].[Is Virtual].&[False]}', CONSTRAINED)) 

Der Hauptanwendungsfall für die StrToSet Funktion ist, wenn die Parameter in eine MDX-Abfrage von etwa SSRS so Syntax wie folgt vorbei selten verwendet:

STRTOSET('{[Fact Process Downtime].[Is Virtual].&[False]}', CONSTRAINED)) 

Wenn die Parameter nicht betroffen sind, dann entfernen Sie einfach den STRTOSET:

{[Fact Process Downtime].[Is Virtual].&[False]} 

Wenn Sie Parameter verwenden, dann lesen Sie in diese hervorragende letzte Antwort von @ zu müssen:

MDX SSRS Parameter category chooses all sub category

Wenn Parameter nicht wichtig dann Ihr Skript vielleicht so etwas wie dies vereinfachen erhalten kann:

SELECT 
NON EMPTY [Measures].[Effective Duration] ON 0, 
NON EMPTY 
    [Dim Cause Code].[Cause].[Cause].ALLMEMBERS * 
    [Dim Classification].[Classification].[Classification].ALLMEMBERS * 
    [Dim Date 1].[Full Date Alternate Key].[Full Date Alternate Key].ALLMEMBERS * 
    [Dim Location 1].[Work Center Name].[Work Center Name].ALLMEMBERS * 
    [Fact Process Downtime].[Start Datetime].[Start Datetime].ALLMEMBERS * 
    [Fact Process Downtime].[End Datetime].[End Datetime].ALLMEMBERS * 
    [Fact Process Downtime].[Id].[Id].ALLMEMBERS 
    ON 1 
FROM 
( 
    SELECT 
     [Fact Process Downtime].[Is Virtual].&[False] ON 0, 
     [Dim Location 1].[Work Center].&[South32 Manganese.Mamatwan.DMS] ON 1, 
     [Dim Classification].[Classification].&[Scheduled Process] ON 2, 
     [Dim Date 1].[Month Fiscal Year].&[Jul/17] ON 3 
    FROM [FactDownTime] 
); 
+0

Große Erklärung, es scheint mir, es ist eine häufige Frage, und die Leute suchen nicht zu viel, bevor Sie hier fragen. Danke, dass du auf meine Antwort verwiesen hast, aber wer ist @mxix? Er löschte seine Antwort? –

+0

@alejandrozuleta Entschuldigungen - mxix ist auch ein Beitrag zum mdx-Tag – whytheq

+0

@alejandro: Es ist nicht so häufig wie man denken würde, die Überschrift könnte die gleiche sein, aber die Erklärung ist nicht immer das, wonach man sucht. –

Verwandte Themen