Mdx mondrian.olap.ResourceLimitExceededException:mondrian错误:要读取的成员数超过限制(10000)

Mdx mondrian.olap.ResourceLimitExceededException:mondrian错误:要读取的成员数超过限制(10000),mdx,pentaho,mondrian,Mdx,Pentaho,Mondrian,我有一个类似于Pentaho博客在以下帖子中报道的问题: 这个查询非常简单: MDX: SELECT NON EMPTY {[Measures].[QTD_EMPRESAS]} on 0, NON EMPTY {[BAIRRO.BAIRRO_H].[TODOS_BAIRRO_H],[BAIRRO.BAIRRO_H].[06], [BAIRRO.BAIRRO_H].[061]} on 1 FROM [V_DM_EMPRESAS_LOCALIDADE] WHERE {[BAIRRO_F.BAIRR

我有一个类似于Pentaho博客在以下帖子中报道的问题:

这个查询非常简单:

MDX: SELECT NON EMPTY {[Measures].[QTD_EMPRESAS]} on 0, NON EMPTY {[BAIRRO.BAIRRO_H].[TODOS_BAIRRO_H],[BAIRRO.BAIRRO_H].[06], [BAIRRO.BAIRRO_H].[061]} on 1 FROM [V_DM_EMPRESAS_LOCALIDADE] WHERE {[BAIRRO_F.BAIRRO_H].[06],[BAIRRO_F.BAIRRO_H].[061]}
如果我使用一个过滤器,它将成功返回,但是使用两个过滤器,就像上面的查询一样,会发生错误。这两个过滤器加起来最多可添加200条记录,低于错误中报告的限制

维度BAIRRO有10000多条记录,但我只过滤了两条BAIRRO

发生错误:

Caused by: mondrian.olap.ResourceLimitExceededException: Mondrian Error:Number of members to be read exceeded limit (10,000)
    at mondrian.resource.MondrianResource$_Def11.ex(MondrianResource.java:1180)
    at mondrian.rolap.SqlMemberSource.getMemberChildren2(SqlMemberSource.java:993)
    at mondrian.rolap.SqlMemberSource.getMemberChildren(SqlMemberSource.java:891)
    at mondrian.rolap.SqlMemberSource.getMemberChildren(SqlMemberSource.java:864)
    at mondrian.rolap.NoCacheMemberReader.getMemberChildren(NoCacheMemberReader.java:179)
    at mondrian.rolap.RolapCubeHierarchy$NoCacheRolapCubeHierarchyMemberReader.readMemberChildren(RolapCubeHierarchy.java:970)
    at mondrian.rolap.RolapCubeHierarchy$NoCacheRolapCubeHierarchyMemberReader.getMemberChildren(RolapCubeHierarchy.java:1027)
    at mondrian.rolap.NoCacheMemberReader.getMemberChildren(NoCacheMemberReader.java:159)
    at mondrian.rolap.RolapSchemaReader.internalGetMemberChildren(RolapSchemaReader.java:186)
    at mondrian.rolap.RolapSchemaReader.getMemberChildren(RolapSchemaReader.java:169)
    at mondrian.rolap.RolapSchemaReader.getMemberChildren(RolapSchemaReader.java:162)
    at mondrian.olap.DelegatingSchemaReader.getMemberChildren(DelegatingSchemaReader.java:78)
    at mondrian.olap.fun.AggregateFunDef$AggregateCalc.getChildCount(AggregateFunDef.java:571)
    at mondrian.olap.fun.AggregateFunDef$AggregateCalc.optimizeMemberSet(AggregateFunDef.java:490)
    at mondrian.olap.fun.AggregateFunDef$AggregateCalc.optimizeChildren(AggregateFunDef.java:398)
    at mondrian.olap.fun.AggregateFunDef$AggregateCalc.optimizeTupleList(AggregateFunDef.java:252)
    at mondrian.rolap.RolapResult.<init>(RolapResult.java:314)
    at mondrian.rolap.RolapConnection.executeInternal(RolapConnection.java:662)
    at mondrian.rolap.RolapConnection.access$000(RolapConnection.java:52)
    at mondrian.rolap.RolapConnection$1.call(RolapConnection.java:613)
    at mondrian.rolap.RolapConnection$1.call(RolapConnection.java:611)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
原因:mondrian.olap.ResourceLimitExceededException:mondrian错误:要读取的成员数超出限制(10000)
位于mondrian.resource.MondrianResource$_Def11.ex(MondrianResource.java:1180)
位于mondrian.rolap.SqlMemberSource.getMemberChildren2(SqlMemberSource.java:993)
位于mondrian.rolap.SqlMemberSource.getMemberChildren(SqlMemberSource.java:891)
位于mondrian.rolap.SqlMemberSource.getMemberChildren(SqlMemberSource.java:864)
位于mondrian.rolap.NoCacheMemberReader.getMemberChildren(NoCacheMemberReader.java:179)
在mondrian.rolap.RolapCubeHierarchy$NoCacheRolapCubeHierarchyMemberReader.readMemberChildren(RolapCubeHierarchy.java:970)
在mondrian.rolap.RolapCubeHierarchy$NoCacheRolapCubeHierarchyMemberReader.getMemberChildren(RolapCubeHierarchy.java:1027)
位于mondrian.rolap.NoCacheMemberReader.getMemberChildren(NoCacheMemberReader.java:159)
在mondrian.rolap.RolapSchemaReader.internalGetMemberChildren(RolapSchemaReader.java:186)上
在mondrian.rolap.RolapSchemaReader.getMemberChildren(RolapSchemaReader.java:169)
在mondrian.rolap.RolapSchemaReader.getMemberChildren(RolapSchemaReader.java:162)
在mondrian.olap.DelegatingSchemaReader.getMemberChildren(DelegatingSchemaReader.java:78)
在mondrian.olap.fun.aggregateUndef$AggregateCalc.getChildCount(aggregateUndef.java:571)
在mondrian.olap.fun.aggregateUndef$AggregateCalc.optimizeMemberSet(aggregateUndef.java:490)
在mondrian.olap.fun.aggregateUndef$AggregateCalc.optimizeChildren(aggregateUndef.java:398)
在mondrian.olap.fun.aggregateUndef$AggregateCalc.optimizeTupleList(aggregateUndef.java:252)
在mondrian.rolap.RolapResult.(RolapResult.java:314)
位于mondrian.rolap.RolapConnection.executeInternal(RolapConnection.java:662)
位于mondrian.rolap.RolapConnection.access$000(RolapConnection.java:52)
在mondrian.rolap.RolapConnection$1.call(RolapConnection.java:613)
在mondrian.rolap.RolapConnection$1.call(RolapConnection.java:611)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
为了避免这个错误,在Mondrian模式中,我配置了角色,在HierarchyGrant配置中,我将rollupPolicy设置为false


这真的是一个好策略吗?或者有更好的吗?

角色和层次授权是为了安全,所以我不会设置它们,除非您需要它们来进行数据访问控制

看起来您的mondrian.result.limit配置设置太低,设置为10000。为了优化Mondrian性能,我将从Mondrian.properties开始,并从那里调整设置:


角色和层次结构授权是为了安全,所以我不会设置它们,除非您需要它们来进行数据访问控制

看起来您的mondrian.result.limit配置设置太低,设置为10000。为了优化Mondrian性能,我将从Mondrian.properties开始,并从那里调整设置:


谢谢你的回答。我根据您的方向调整了mondrian.properties,但执行查询时仍然存在错误。某些查询会生成超时错误。通过stacktrace错误和调试,我了解到在计算total列时会出现问题,在total列中对维度的每个记录执行查询,这克服了查询或超时的限制。多维数据集架构中是否有任何配置可以提供帮助?特别是总列?我必须查看堆栈跟踪才能知道问题出在哪里。查询超时的原因有很多,包括SQL速度慢、单元格太多、复杂的MDX表达式、mondrian.properties设置等。您可以尝试使用单元格批量大小(请参见其中的注释)来调整Segment.load查询。仅供参考,Pentaho 9.2将包括许多查询计划执行和日志记录改进,以帮助调试性能问题。感谢您的回答。我根据您的方向调整了mondrian.properties,但执行查询时仍然存在错误。某些查询会生成超时错误。通过stacktrace错误和调试,我了解到在计算total列时会出现问题,在total列中对维度的每个记录执行查询,这克服了查询或超时的限制。多维数据集架构中是否有任何配置可以提供帮助?特别是总列?我必须查看堆栈跟踪才能知道问题出在哪里。查询超时的原因有很多,包括SQL速度慢、单元格太多、复杂的MDX表达式、mondrian.properties设置等。您可以尝试使用单元格批量大小(请参见其中的注释)来调整Segment.load查询。仅供参考,Pentaho 9.2将包括许多查询计划执行和日志记录改进,以帮助解决调试性能问题。