当我有两个成员引用并且& [Value]语法交叉连接时,我收到此错误:
Query(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]
它解释我的表达是什么,如果不是作为一个元组集?我一直偶然发现这些事情,而且它对于我的元组集试图做什么感到非常困惑,因为它认为它是字符串或数字表达式。
答案 0 :(得分:3)
这确实令人困惑,因为看起来两个查询之间没有太大区别。此问题在博文中有所描述:http://www.softwaremasons.com/MartinsBlog/tabid/74/EntryId/56/Is-SSAS-Too-Lenient-on-MDX-Syntax.aspx
如果用CrossJoin函数替换第一个*运算符,您会发现查询执行正常。
*只是一个CrossJoin以不同的方式编写 - 所以如果它以单向工作,而另一方面失败 - 我们可以假设问题在于Analysis Services引擎如何解析*运算符。当您添加CrossJoin函数时,您将显式返回一个集合,然后将其与*一起使用以与度量交叉连接,一切都很好。在您的工作示例中,您已使用大括号显式标识了一个集合,从而为引擎提供了继续查询所需的内容 - 但是当您尝试将*与两个成员一起使用时,它将失败。从技术上讲,每个成员都是一个一个,它应该工作,但引擎不会以这种方式解析查询并失败。
上面的博客文章表示问题是MDX的宽大处理。它允许我们在没有强烈输入结果的情况下离开(即排除{}以将成员键入为集合)。我自己称之为虫子。 :)如果语言让我们在一个地方松散,那么它应该在其他地方保持一致。
答案 1 :(得分:2)
表达式是单元组集(即具有元组的集合,元组是多维数据集中的一个特定成员。这是(令人困惑的)与元组集不同。
来自MSDN - Members, Tuples and Sets
由单个元组组成的集合不是元组;它们被MDX解释为集合。某些MDX函数接受元组作为参数,如果传递单个元组集将引发错误。元组和单元组不可互换。
对于错误消息,当您看到带有额外空格的“函数”时,它指的是您的查询中没有应用函数的格式错误的集合或元组(因此没有函数名称放在错误信息)。
例如,如果您编写了EXCEPT([A].[B].[C], [D].[E].[F])
之类的查询,其中一个参数无效,则会收到包含“函数EXCEPT ...”的错误。但是如果你只有一个定义不明确的集合或元组,你会得到两个空格的“函数”。这似乎是MSAS的错误报告!