2015-05-05 63 views
0

我創建了一個查詢,顯示所有大洲,他們的國家和這些國家(1維)中排名前5位的用戶的訂單(度量)。現在我想展現給總在這些國家,而不是隻有那些所有用戶的前5加入全體會員總數

我也跟着在下面的線程https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e65c498c-ecf7-4099-a242-64873b8c3613/mdx-topcount-with-non-filtered-totals?forum=sqlanalysisservices 答案,但語法看起來不正確的蒙德里安。

這是我的查詢:。

WITH MEMBER [Measures].[Total] AS 
'SUM([USER].[Country].currentmember, (USER].[UserName].Members, [Measures].[Orders]))' 
SELECT NON EMPTY {[Measures].[Orders], [Measures].[Total]} ON COLUMNS, 
NON EMPTY {Order(Hierarchize({[USER].[Continent].Members, Generate([USER].[Country].Members, TopCount(Hierarchize({[USER].[Country].currentmember, [USER].[UserName].Members}), 6.0, [Measures].[Orders]))}), [Measures].[Orders], DESC)} ON ROWS 
FROM [Products] 
WHERE [Time].[Time].[2014] 

蒙德里安提供了以下錯誤對於這部分「SUM([USER] [國家] .currentmember,(USER] [用戶名] .Members,[措施] 。[訂單]))':

Caused by: mondrian.olap.MondrianException: Mondrian Error:No function matches signature '(<Set>, <Member>)' 
    at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:969) 
    at mondrian.olap.ValidatorImpl.getDef(ValidatorImpl.java:205) 
    at mondrian.olap.fun.FunUtil.resolveFunArgs(FunUtil.java:2023) 
    at mondrian.mdx.UnresolvedFunCall.accept(UnresolvedFunCall.java:102) 
    at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:79) 
    at mondrian.olap.fun.FunUtil.resolveFunArgs(FunUtil.java:2020) 
    at mondrian.mdx.UnresolvedFunCall.accept(UnresolvedFunCall.java:102) 
    at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:79) 
    at mondrian.olap.Formula.accept(Formula.java:106) 
    at mondrian.olap.ValidatorImpl.validate(ValidatorImpl.java:155) 
    at mondrian.olap.Query.resolve(Query.java:551) 
    at mondrian.olap.Query.resolve(Query.java:446) 
    at mondrian.olap.Query.<init>(Query.java:200) 
    at mondrian.olap.Query.<init>(Query.java:161) 
    at mondrian.olap.Parser$FactoryImpl.makeQuery(Parser.java:927) 
    at mondrian.parser.MdxParserImpl.selectStatement(MdxParserImpl.java:1241) 
    at mondrian.parser.MdxParserImpl.statement(MdxParserImpl.java:1074) 
    at mondrian.parser.MdxParserImpl.statementEof(MdxParserImpl.java:188) 
    at mondrian.parser.JavaccParserValidatorImpl.parseInternal(JavaccParserValidatorImpl.java:57) 
    at mondrian.olap.ConnectionBase.parseStatement(ConnectionBase.java:96) 
    ... 72 more 

感謝您的幫助。

+0

歡迎回來溫尼 - 「元組麻煩」...見下文 – whytheq

回答

2

這是一個標準錯誤。

這是無效的:

Sum 
(
    [USER].[Country].CurrentMember 
,(
    USER.[UserName].MEMBERS 
    ,[Measures].[Orders] 
) 
) 

更具體地講,該位是無效

,(
    USER.[UserName].MEMBERS 
    ,[Measures].[Orders] 
) 

大括號()創建tuple和一個元組像這樣創建:

(<member_expression>, <member_expression>, <member_expression>, ...) 

沒有任何參數被允許設置表達式。

我假設你想要的總所有的用戶名 - 因此就使用該層次結構的所有成員的元組:

Sum 
(
    [USER].[Country].CurrentMember 
,(
    USER.[UserName].[All User Names] //<<<<replace this with whatever the correct name is of your all member 
    ,[Measures].[Orders] 
) 
) 
+1

對元組基本概念的很好的解釋。增加了一個答案的變體。 – SouravA

+0

再次感謝您的幫助。修復 :)。多麼愚蠢的錯誤... – Vinnie111

1

以前的答案恰如其分地涵蓋了「元組麻煩」,因此深得對此深入研究。這是擺脫問題的另一種方法。

SUM 
(
    [USER].[Country].CurrentMember 
, 
AGGREGATE 
    (
     USER.[UserName].MEMBERS 
     ,[Measures].[Orders] 
    ) 
) 

AGGREGATE功能將做增加了訂單範圍內的所有用戶名的工作。

+1

(高調)不知道他們是否是同樣的表現明智? (我在MDXstudio上的perfmon被打破了....所以我會有興趣知道結果) – whytheq