2015-01-17 75 views
0

下面是我MDX查詢生成老化報告。我想用一個名爲SET 計算的量度內。我得到這個錯誤:老化報告MDX查詢問題?

Query (3, 1) The function expects a tuple set expression for the 1 argument. A string or numeric expression was used.

可以解決這個問題嗎?

WITH 
    SET [Cnt] AS 
    {'FILTER(
      [Cheque Detail Fact Keys].[Cheque Master ID].[Cheque Master ID] 
     ,[Measures].[Paid Amt]<>0 
     )' 
    } 
    SET [x] AS 
    { 
     ClosingPeriod 
     (
     [Cal Date].[Month].[Month] 
     ,[Cal Date].[Month].[All] 
    ) 
    } 
    MEMBER [Measures].[0-30] AS 
    Sum 
    (
     [x].Item(0).Lag(1) : [x].Item(0).Lag(0) 
    ,Count(Cnt) //[Measures].[Master Count] 
    ) 
    MEMBER [Measures].[31-60] AS 
    Sum 
    (
     [x].Item(0).Lag(2) : [x].Item(0).Lag(1) 
    ,Count(Cnt) //[Measures].[Master Count] 
    ) 
    MEMBER [Measures].[>60] AS 
    Sum 
    (
     NULL : [x].Item(0).Lag(4) 
    ,Count(Cnt) //[Measures].[Master Count] 
    ) 
SELECT 
    { 
    [Measures].[0-30] 
    ,[Measures].[31-60] 
    ,[Measures].[>60] 
    } ON 0 
,{[Customer].[Name].[Name].ALLMEMBERS} ON 1 
FROM [My Cube]; 
+0

請讓我知道我的代碼是否工作。 – SouravA

回答

0

我認爲這只是腳本的第一部分。你爲什麼使用字符串?嘗試刪除apostrophies,只是在.MEMBERS增加對淨度:

WITH 
    SET [Cnt] AS 
    {FILTER(
      [Cheque Detail Fact Keys].[Cheque Master ID].[Cheque Master ID].MEMBERS 
     ,[Measures].[Paid Amt]<>0 
     ) 
    } 
    ... 
    ... 

錯誤消息似乎有點玄,但我相信,花括號的函數本身 - 它們將在他們裏面的任何成員爲一組。所以,你已經有效地寫了這個{<some string>}但大括號期待的東西,可以是一組。

WITH 
    SET [Cnt] AS 
    {'FILTER(
      [Date].[Date].[Date].MEMBERS 
     ,[Measures].[Internet Sales Amount] > 10000 
     )' 
    } 
SELECT 
    [Measures].[Internet Sales Amount] ON 0 
,[Cnt] ON 1 
FROM [Adventure Works]; 

要使用的Cnt計數中,你可以創建度量以下措施,但我不認爲這將是上下文感知:

我運行以下AdvWrks腳本時,得到了同樣的錯誤信息因爲該集合在其他任何事情之前都被評估過:

WITH 
    SET [Cnt] AS 
    {FILTER(
      [Cheque Detail Fact Keys].[Cheque Master ID].[Cheque Master ID] 
     ,[Measures].[Paid Amt]<>0 
     ) 
    } 
    MEMBER [Measures].[Master Count] AS 
    [Cnt].count 
    SET [x] AS 
    { 
     ClosingPeriod 
     (
     [Cal Date].[Month].[Month] 
     ,[Cal Date].[Month].[All] 
    ) 
    } 
    MEMBER [Measures].[0-30] AS 
    Sum 
    (
     [x].Item(0).Lag(1) : [x].Item(0).Lag(0) 
    ,[Measures].[Master Count] 
    ) 
    MEMBER [Measures].[31-60] AS 
    Sum 
    (
     [x].Item(0).Lag(2) : [x].Item(0).Lag(1) 
    ,[Measures].[Master Count] 
    ) 
    MEMBER [Measures].[>60] AS 
    Sum 
    (
     NULL : [x].Item(0).Lag(4) 
    ,[Measures].[Master Count] 
    ) 
SELECT 
    { 
    [Measures].[0-30] 
    ,[Measures].[31-60] 
    ,[Measures].[>60] 
    } ON 0 
,{[Customer].[Name].[Name].ALLMEMBERS} ON 1 
FROM [My Cube]; 
+0

將計算得到的度量值> 60天。在超過60天內需要使用Count(Cnt)(SET)而不是SUM。如何使用計數測量? – padh

+0

你可以創建一個'AdvWks'例如我一起玩? – whytheq

0

問題是您嘗試將字符串傳遞給集合。您需要將字符串轉換爲一組首先使用StrToSet功能。也正如@whytheq所說的,你不需要花括號。

嘗試更換

WITH 
    SET [Cnt] AS 
    {'FILTER(
      [Cheque Detail Fact Keys].[Cheque Master ID].[Cheque Master ID] 
     ,[Measures].[Paid Amt]<>0 
     )' 
    } 

與此 - >

WITH 
    SET [Cnt] AS 
    StrToSet('FILTER(
      [Cheque Detail Fact Keys].[Cheque Master ID].[Cheque Master ID] 
     ,[Measures].[Paid Amt]<>0 
     )' 
    ) 

另外使用COUNT功能是<<SomeSet>>.COUNT正確的方法,NOTCOUNT(<<SomeSet>>)

0

的[CNT]組看起來很貴...是基於事實表嗎?如果是這樣,粒度是多少?

也許您可以在度量值組的基表(例如IIF(付費金額<> 0,1,0))的DSV中添加計算字段,然後在該字段上創建基於SUM的度量。然後您的查詢變爲...

WITH 
    SET [x] AS 
    { 
     ClosingPeriod 
     (
     [Cal Date].[Month].[Month] 
     ,[Cal Date].[Month].[All] 
    ) 
    } 
    MEMBER [Measures].[0-30] AS 
    Sum 
    (
     [x].Item(0).Lag(1) : [x].Item(0).Lag(0) 
    ,[Measures].[NonZero Check Count] 
    ) 
    MEMBER [Measures].[31-60] AS 
    Sum 
    (
     [x].Item(0).Lag(2) : [x].Item(0).Lag(1) 
    ,[Measures].[NonZero Check Count] 
    ) 
    MEMBER [Measures].[>60] AS 
    Sum 
    (
     NULL : [x].Item(0).Lag(4) 
    ,[Measures].[NonZero Check Count] 
    ) 
SELECT 
    { 
    [Measures].[0-30] 
    ,[Measures].[31-60] 
    ,[Measures].[>60] 
    } ON 0 
,{[Customer].[Name].[Name].ALLMEMBERS} ON 1 
FROM [My Cube]; 
+0

SET(Cnt)基於Dimension表 – padh