2015-02-10 183 views
0

我在使用openquery時遇到了問題。我想選擇列與它的名字,但名字太長,因爲有太多的水平處理MDX OPENQUERY,以該開頭的標識符太長。最大長度是128

SELECT 
    A."[Dimension].[NAMEOFLEVEL1].[NAMEOFLEVEL2].[NAMEOFLEVEL3].[NAMEOFLEVEL4].[NAMEOFLEVEL5].[NAMEOFLEVEL6]" AS Acc2 
FROM OPENQUERY(CUBEX, 
     'SELECT 
      ({ 
       [Dimension].[NAMEOFLEVEL1].[NAMEOFLEVEL2].[NAMEOFLEVEL3].[NAMEOFLEVEL4].[NAMEOFLEVEL5].[NAMEOFLEVEL6] 
      }) DIMENSION PROPERTIES MEMBER_KEY 
      ON COLUMNS, 
      NON EMPTY (
       [TIME].[MONTH] 
      ) DIMENSION PROPERTIES MEMBER_KEY 
      ON ROWS 
     FROM [MyTable] 
    ') A 

錯誤是如下:

與「[維度]開始時,該標識符[NAMEOFLEVEL1] 。[NAMEOFLEVEL2]。[NAMEOFLEVEL3]。[NAMEOFLEVEL4]。[NAMEOFLEVEL5]。[NAMEOFLEVEL6]'太長。最大長度爲128.

+0

對'OPENQUERY'有限制。對於我遇到的第二個參數所允許的總字符串長度也有限制。 – whytheq 2015-02-11 09:24:11

回答

0

這不是OPENQUERY限制。它的SQL column name的限制 - 實際上是128個字符。

不過,您的情況是比較容易的 - 沒有必要列出所有層次結構如果您在MDX遇到很長的名字(假設事實維度全稱+ MEMBER_CAPTION是包含在輸出

SELECT 
A."[Dimension].[NAMEOFLEVEL1].[MEMBER_CAPTION]" as Level1, 
A."[Dimension].[NAMEOFLEVEL2].[MEMBER_CAPTION]" as Level2 
... 
FROM OPENQUERY(CUBEX, 
    'SELECT 
     ({ 
      [Dimension].[NAMEOFLEVEL6].members 
     }) DIMENSION PROPERTIES MEMBER_KEY 
     ON COLUMNS, 
     NON EMPTY (
      [TIME].[MONTH] 
     ) DIMENSION PROPERTIES MEMBER_KEY 
     ON ROWS 
    FROM [MyTable] 
') A 

他們的名字用作列名稱),然後將您的級別包含在名稱較短的集合中。

SELECT 
A."[Measures].[allLevels].[MEMBER_CAPTION]" AS Acc2 
FROM OPENQUERY(CUBEX, 
    'with member allLevels as 
     (
      [Dimension].[NAMEOFLEVEL1].[NAMEOFLEVEL2].[NAMEOFLEVEL3].[NAMEOFLEVEL4].[NAMEOFLEVEL5].[NAMEOFLEVEL6].members 
    ) 

     SELECT 
     ({ 
      [Measures].[allLevels] 
     }) DIMENSION PROPERTIES MEMBER_KEY 
     ON COLUMNS, 
     NON EMPTY (
      [TIME].[MONTH] 
     ) DIMENSION PROPERTIES MEMBER_KEY 
     ON ROWS 
    FROM [MyTable] 
') A 
0

那麼可能的解決方法是從使用User Hierarchy切換到等效的Attribute Hierarchy,這將有一個小得多的標識符。

--USER HIERARCHY EXAMPLE 
SELECT 
    "[Date].[Date - Calendar Month].[Calendar Month].[MEMBER_CAPTION]" 
FROM OPENQUERY(linkedName, 
' 
SELECT 
    {[Measures].[xxx]} ON 0 
,NON EMPTY 
    [Date].[Date - Calendar Month].[Calendar Month].MEMBERS ON 1 
FROM [OurCube];') 


--ATTRIBUTE HIERARCHY EXAMPLE - NOT MUCH SMALLER IN OUR CUBE 
SELECT 
    "[Date].[Calendar Month].[Calendar Month].[MEMBER_CAPTION]" 
FROM OPENQUERY(linkedName, 
' 
SELECT 
    {[Measures].[xxx]} ON 0 
,NON EMPTY 
    [Calendar Month].[Calendar Month].MEMBERS ON 1 
FROM [OurCube];') 

也許你縮短了這一點:

SELECT 
    A."[Dimension].[NAMEOFLEVEL6].[NAMEOFLEVEL6]" AS Acc2 
FROM OPENQUERY(CUBEX, 
     'SELECT 
      ({ 
       [Dimension].[NAMEOFLEVEL6].[NAMEOFLEVEL6] 
      }) DIMENSION PROPERTIES MEMBER_KEY 
      ON COLUMNS, 
      NON EMPTY (
       [TIME].[MONTH] 
      ) DIMENSION PROPERTIES MEMBER_KEY 
      ON ROWS 
     FROM [MyTable] 
    ') A 
+0

這是一個父母/孩子類型,級別從1到5.我不知道該怎麼辦。 – 2015-02-11 10:02:48

+0

我想要做的是獲取所有級別的值,並應用COALESCE以獲取NOT NULL值。 – 2015-02-11 10:27:27

+0

還有一個問題,X成員的級別名稱是相同的[Dimension]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL ==== X Member]。我不知道如何做[Dimension] .level(1)。[Xmember]等等 – 2015-02-11 10:30:51