2014-05-09 73 views
3

我試圖構建一個查詢,選擇年齡在1至20歲之間的用戶所做的前10位產品(最喜歡)在2014年,我嘗試使用下面的查詢:具有兩個值之間的維度屬性和另一個維度屬性等於另一個值的MDX查詢

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子句。我在這裏做錯了什麼?這是做這個查詢的方式嗎?

謝謝

回答

2

在WHERE子句中,您需要指定一個元組。 Tuple是一個或多個維度的無序集合。

嘗試這種情況:

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子句中的元組是正確的,因爲它引用了兩個不同維度的兩個成員。

+0

請原諒第一句中的錯誤措詞。 – nsousa

-1

您的切片機謂詞試圖做一個集合和成員的交叉產品。這是不可能的。

在日期成員周圍添加括號('{'&'}')以將其變爲一組成員。它將成爲一個複合謂詞,其中包括你的兩個集合。

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]} 
) 
+0

有道理,但現在它拋出這個錯誤:「沒有函數匹配簽名」(,)'「 – JPHorta

+1

我糾正了一個小錯誤,星號是需要用來交叉連接兩個集合,而不是逗號的運算符。使用上面的nsousa的解決方案olap引擎可以更容易地將計算集優化爲集合,因爲它們可以單獨進行評估 – Luc

0

使用CROSS JOIN在我的範圍內創建了「直接」成員和日期所有組合的元組對我的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]}) 
相關問題