所有成员总数的 Topcount

Topcount with total of all members

我正在创建一个查询,该查询显示所有大洲、它们的国家和这些国家(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].[Country].currentmember, (USER].[UserName].Members, [Measures].[Orders]))':

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

感谢您的帮助。

这是标准错误。

这是无效的:

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

更具体地说,这个位是无效的

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

大括号 () 创建一个 tuple 并创建一个元组,如下所示:

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

None 个参数允许设置表达式。

我假设您想要所有用户名的总计 - 所以只需在元组中使用该层次结构的所有成员:

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

之前的回答恰当地涵盖了 "tuple trouble",因此不会深入探讨。这是解决此问题的另一种方法。

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

AGGREGATE 函数将完成将范围内所有用户名的订单相加的工作。