所有成员总数的 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
函数将完成将范围内所有用户名的订单相加的工作。
我正在创建一个查询,该查询显示所有大洲、它们的国家和这些国家(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
函数将完成将范围内所有用户名的订单相加的工作。