Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 处理MDX OPENQUERY时,以开头的标识符太长。最大长度为128_Sql Server 2008_Mdx - Fatal编程技术网

Sql server 2008 处理MDX OPENQUERY时,以开头的标识符太长。最大长度为128

Sql server 2008 处理MDX OPENQUERY时,以开头的标识符太长。最大长度为128,sql-server-2008,mdx,Sql Server 2008,Mdx,我在使用openquery时遇到问题。我想选择名称为的列,但名称太长,因为级别太多 SELECT A."[Dimension].[NAMEOFLEVEL1].[NAMEOFLEVEL2].[NAMEOFLEVEL3].[NAMEOFLEVEL4].[NAMEOFLEVEL5].[NAMEOFLEVEL6]" AS Acc2 FROM OPENQUERY(CUBEX, 'SELECT ({ [Dimension

我在使用openquery时遇到问题。我想选择名称为的列,但名称太长,因为级别太多

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].[NameOfLevel 1].[NameOfLevel 2].[NameOfLevel 3].[NameOfLevel 4].[NameOfLevel 5].[NameOfLevel 6]”开头的标识符太长。最大长度为128。

一个可能的解决方法是从使用
用户层次结构
切换到具有更小标识符的等效
属性层次结构

--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的限制-实际上是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中遇到很长的名称(假设事实维度全名+成员_标题用作列名),则将级别包装在一个名称较短的集合中

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

OPENQUERY
有一些限制。我遇到的第二个参数允许的字符串总长度也有限制。它是父/子类型,级别从1到5。我不知道在这种情况下该怎么做。我想做的是获取所有级别的值,并应用合并来获得级别之间的非空值。还有一个问题,X成员的级别名称是相同的[Dimension]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL]。[NAMEOFLEVEL==X成员]。我不知道如何做像[Dimension].level(1)。[Xmember]这样的事情,我没有父子维度方面的经验,所以我无法提供帮助。我们有一个非常好的贡献者@FrankPI,他可能会提供帮助。尽管你最后的评论是一个新的独立问题?