我正在尝试构建一个查询,以选择 2014 年年龄在 1 到 20 岁之间的用户制作的前 10 名产品(最喜欢的产品)。我正在尝试使用以下查询:
WITH SET [TopProducts] AS TOPCOUNT([Products].[Name].Members,10,[Measures].[Likes])
SELECT {[Measures].[Likes]}
ON COLUMNS, {[TopProducts]}
ON ROWS FROM [Likes]
WHERE (
{[Ages].[Age].[1]:[Ages].[Age].[24]},
[Date].[Year].[2014]
)
此查询返回错误:No function matches signature '(<Set>, <Member>)'
如果我删除 [Date.Date].[Year].[2014]
从查询来看,它运行顺利,所以我认为问题出在 where 子句的表述上。我在这里做错了什么?这是执行此查询的方式吗?
谢谢
最佳答案
在 WHERE 子句上,您需要指定一个元组。元组是来自一个或多个维度的一组无序成员。
试试这个:
WITH
SET [TopProducts] AS TOPCOUNT([Products].[Name].Members,10,[Measures].[Likes])
MEMBER [Ages].[Range] as Aggregate( [Ages].[Age].[1]:[Ages].[Age].[24] )
SELECT {[Measures].[Likes]}
ON COLUMNS, {[TopProducts]}
ON ROWS FROM [Likes]
WHERE ( [Ages].[Range], [Date].[Year].[2014] )
聚合函数接受一个集合并返回一个成员,该成员是集合中所有元素的聚合。现在 WHERE 子句中的元组是正确的,因为它引用了两个不同维度的两个成员。
关于维度属性介于两个值和另一个维度属性等于另一个值的 MDX 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566741/