我试图建立一个查询,选择2014年年龄介于1到20岁之间的用户制作的十大产品(最喜欢的)。我试图使用以下查询:
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子句的制定。我在这做错了什么?这是进行此查询的方式吗?
由于
答案 0 :(得分:2)
在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] )
Aggregate函数接受一个set并返回一个成员,该成员是该集合中所有元素的聚合。现在你在WHERE子句上的元组是正确的,因为它引用了两个不同维度的两个成员。
答案 1 :(得分:0)
USE CROSS JOIN创建了&#39; Direct&#34;的所有组合。成员和我的范围中的日期作为我的WHERE切片器的元组。我认为这是正确的答案。
WITH SET [TopProducts] AS TOPCOUNT([Products].[Name].Members,10,[Measures].
[Likes])
SELECT {[Measures].[Likes]}
ON COLUMNS, {[TopProducts]}
ON ROWS FROM [Likes]
WHERE CROSSJOIN([Date].[Year].[2014],{[Ages].[Age].[1]:[Ages].[Age].[24]})
答案 2 :(得分:-1)
您的切片器谓词尝试对集合和成员进行交叉产品。那是不可能的。
在日期成员周围添加括号('{'&amp;'}'),将其转换为一个成员集。它将成为包含两组的复合谓词。
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]}
)