mdx查询比sql查询花费的时间更长

mdx查询比sql查询花费的时间更长,mdx,geospatial,data-warehouse,olap,mondrian,Mdx,Geospatial,Data Warehouse,Olap,Mondrian,我已经将sql分析转换为mdx分析,并发现mdx在执行时间方面要比sql昂贵得多。下面是我试图转换为mdx的sql 选择inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.事件id,inc.inc.inc.inc.inc.事件开始时间,inc.inc.inc.inc.事件结束时间,inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.in

我已经将sql分析转换为mdx分析,并发现mdx在执行时间方面要比sql昂贵得多。下面是我试图转换为mdx的sql


选择inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.事件id,inc.inc.inc.inc.inc.事件开始时间,inc.inc.inc.inc.事件结束时间,inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc.inc,fir.fir\u serial\u no as fir\u id from analysis\u mdx.event as inc join analysis\u mdx.event\u type as inc\u type on inc.event\u type=inc\u type.event\u type\u id left outer join analysis\u mdx.fir\u no=fir.fir\u no join analysis\u mdx.district(st_包含(district.the\u geom,inc.the\u geom)和district.district\u id=1)其中,inc.事件类型为('10'、'8'、'14'、'11'、'5'、'9'、'19'、'21'、'6'、'7'、'16'、'3'、'4'、'12'、'20'、'13'、'1'、'2'、'23'、'17'、'18')和((inc.事件开始时间介于'2012-01-29T00:00:00'和'2014-12-29T23:59:59'之间)按事件开始时间、事件结束时间、事件代码、事件开始时间、事件结束时间排序,因为我不确定执行计划,但是这里什么都没有

  • 您有一个经过良好调优的SQL查询,它正在执行集合计算,SQL Server擅长于此。而且由于桌子的大小相对较小,它的速度肯定会很快。另一方面,在MDX查询中,您实际上是在逐单元进行计算(由于使用了
    CURRENTMEMBER
    函数。分析引擎很难做到这一点!因此它一定会很慢

  • 您使用的是
    NON-EMPTY
    函数,它基本上遍历每一行,并过滤空行。这会增加引擎的开销。通过删除
    NON-EMPTY
    子句运行查询,并查看它是否会降低执行时间(不过,我注意到,
    NON-EMPTY
    子句实际上提高了渲染时间)


  • 必须在此处重新检查多维数据集设计。如果可能,必须尝试将所有计算成员作为所涉及维度的属性放置。

    启用mondrian slow sql查询日志(在log4j.xml中完成),并查看哪个查询是问题所在

    看看是一个查询,还是蒙德里安正在执行1000个查询


    如果后者检查模式中的approxRowCount选项以及uniqueMembers选项。可能会发布模式和上述更改的结果,以便我们了解更多。还有(不推荐的)highcardinality选项。

    -请尽量简化您的问题。我不是说问题太难回答,而是快速浏览问题,因为有太多细节。我使用的是Geomendrian…请您简要介绍一下如何启用mondrian慢速查询日志。这只是log4j.xml中的一个条目。从钢笔中的条目复制并粘贴它taho BI server为例。@sourav..实际上我的情况是,我需要维度事件的级别事件id的所有属性,并且我想为上述多维数据集过滤特定区域和时间范围的结果…是否有其他方法可以实现相同的结果,而无需逐单元计算,即不使用CURRE新成员。。???