2011-09-20 57 views
0

當我有與& [數值]語法被crossjoined兩個成員引用,那麼我得到這個錯誤:MDX不能識別我的表達式作爲元組集?

查詢(3,3)函數需要爲1個參數的元組設置表達。使用了一個字符串或數字表達式。

請注意,The function中有兩個空格,就好像它試圖命名其中一個沒有名稱的函數。我可以用「Adventure Works DW 2008R2」示例數據庫重新創建問題。

不起作用:

SELECT 
    NON EMPTY 
    { 
    [Date].[Day of Month].&[1] 
    * [Sales Territory].[Sales Territory Country].&[Canada] 
    * [Measures].[Sales Amount] 
    } 
    ON COLUMNS, 
    NON EMPTY 
    { 
    [Product].[Product Name] 
    } 
    ON ROWS 
    FROM [Adventure Works] 

作品:

SELECT 
    NON EMPTY 
    { 
    [Date].[Day of Month].&[1] 
    * {([Sales Territory].[Sales Territory Country].&[Canada])} 
    * [Measures].[Sales Amount] 
    } 
    ON COLUMNS, 
    NON EMPTY 
    { 
    [Product].[Product Name] 
    } 
    ON ROWS 
    FROM [Adventure Works] 

也可以工作:

SELECT 
    NON EMPTY 
    { 
    {([Date].[Day of Month].&[1])} 
    * [Sales Territory].[Sales Territory Country].&[Canada] 
    * [Measures].[Sales Amount] 
    } 
    ON COLUMNS, 
    NON EMPTY 
    { 
    [Product].[Product Name] 
    } 
    ON ROWS 
    FROM [Adventure Works] 

也可以工作:

SELECT 
    NON EMPTY 
    { 
    [Date].[Day of Month].&[1]   
    * [Measures].[Sales Amount] 
    } 
    ON COLUMNS, 
    NON EMPTY 
    { 
    [Product].[Product Name] 
    } 
    ON ROWS 
    FROM [Adventure Works] 

也適用:

SELECT 
    NON EMPTY 
    { 
    [Sales Territory].[Sales Territory Country].&[Canada]  
    * [Measures].[Sales Amount] 
    } 
    ON COLUMNS, 
    NON EMPTY 
    { 
    [Product].[Product Name] 
    } 
    ON ROWS 
    FROM [Adventure Works] 

是什麼樣的解釋我的表情,如果不是作爲一個元組集?我總是偶然遇到這類事情,它真的很困惑,它試圖對我的元組集合做什麼,它認爲它是一個字符串或數字表達式。

回答

3

這確實令人困惑,因爲它看起來兩個查詢之間沒有太大的區別。這個問題在博客文章中有描述:http://www.softwaremasons.com/MartinsBlog/tabid/74/EntryId/56/Is-SSAS-Too-Lenient-on-MDX-Syntax.aspx

如果你用CrossJoin函數替換第一個*運算符,你會發現查詢執行得很好。

*僅僅是一種以不同方式編寫的CrossJoin - 所以如果它以一種方式工作,而另一種則失敗 - 我們可以假設問題在於Analysis Services引擎如何解析*運算符。當您添加CrossJoin函數時,您顯式返回一個隨後使用的集合,用於與度量交叉,並且一切正常。在您的工作示例中,您已使用大括號明確標識了一個集合,從而爲引擎提供了進行查詢所需的操作 - 但是當您嘗試對兩個成員使用*時,它將失敗。從技術上講,每個成員都是一個集合,它應該可以工作,但引擎不會以這種方式解析查詢並失敗。

上面的博客文章表示問題在於寬鬆的MDX。它可以讓我們在沒有強烈輸入結果的情況下離開(即排除{}以鍵入一個成員作爲一個集合)。我自己會把它稱爲一個錯誤。 :)如果語言讓我們在一個地方鬆動,它應該在其他地方保持一致。

2

表達是一個單元組組(即一組與一個元組是在立方體中一個特定成員,這是(混淆性)不一樣的元組集合。

MSDN - Members, Tuples and Sets

Sets composed of a single tuple are not tuples; they are interpreted as sets by MDX. Certain MDX functions accept tuples as parameters, and will raise an error if a single tuple set is passed. Tuples and single-tuple sets are not interchangeable.

至於錯誤消息,當您看到帶有多餘空格的「函數」時,它指的是查詢中沒有應用函數的格式錯誤的集合或元組(因此沒有函數名稱在錯誤消息中)

例如,如果您編寫了一個類似EXCEPT([A].[B].[C], [D].[E].[F])的查詢,並且其中一個參數無效,則會出現一個包含「The function EXCEPT ...」的錯誤。但是,如果你只是有一個定義不清的集合或元組,你會得到兩個空格的「函數」。這似乎是由MSAS錯誤報告錯誤!

+0

謝謝,我知道他們是單個元組集合。你能更具體地瞭解我的查詢形成了什麼嗎?除['日期]。[日月]。&&[1]'或'[Sales Territory]。[Sales Territory Country]。&[加拿大]'外,兩者均不包括在括號中澄清它是一個單元組'{()}'。所以,如果它形成的很糟糕,爲什麼它接受的是不一致的? – AaronLS

+0

我添加了對我的帖子有用的所有變體。我期望如果查詢形式不好,那麼這些都不會起作用?但所有這些工作除了一個之外似乎都很奇怪。 – AaronLS

相關問題