处理 MDX OPENQUERY,开头的标识符太长。最大长度为 128

Handling MDX OPENQUERY, The identifier that starts with is too long. Maximum length is 128

我在使用 openquery 时遇到问题。我想 select 带有它的名称的列,但名称太长,因为有很多级别

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

错误如下:

以“[Dimension].[NAMEOFLEVEL1].[NAMEOFLEVEL2].[NAMEOFLEVEL3].[NAMEOFLEVEL4].[NAMEOFLEVEL5].[NAMEOFLEVEL6]”开头的标识符太长。最大长度为 128。

嗯,一个可能的解决方法是从使用 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

这不是 OPENQUERY 的限制。它是 SQL column name 的限制 - 实际上是 128 个字符。

不过,您的情况更简单 - 无需列出所有层次结构以在输出中包含它们的名称

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

如果您在 MDX 中遇到非常长的名称(假设 Dimension 全名 + Member_CAPTION 用作列名),则将您的关卡包装在名称较短的集合中。

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