Sql server 2008 处理MDX OPENQUERY时,以开头的标识符太长。最大长度为128
我在使用openquery时遇到问题。我想选择名称为的列,但名称太长,因为级别太多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
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,他可能会提供帮助。尽管你最后的评论是一个新的独立问题?