缓慢的Excel数据透视表MDX?

每当与数据透视表进行交互时,Excel的速度非常缓慢。 添加/删除一个字段,更改filter或切片器,所有都需要几分钟的Excel被冻结才能响应。

看起来,生成的MDX是非常低效的。 我可以理解,他们必须dynamic生成MDX,并且必须支持数据透视表的许多function,但速度慢100倍是可笑的。

当他们为一行或一列的字段生成MDX时,他们使用DrilldownLevel(… [Property Dimension]。[County])

我不确定Excel的更复杂的方法的目的是什么,但我希望有一些选项,我可以取消选中,以便Excel不需要使用DrilldownLevel函数。

相反,我通常省略Drilldownlevel函数,只需要[Property Dimension]。[County] 。[County]来访问属性。

查询相同的结果集需要5分钟的Excel的MDX和less于5秒与我的MDX。

我已经证实,缓慢不是Excel渲染/格式化结果的问题,因为我使用了Excel使用的MDX,并直接在SSMS中运行它来validation计时。 我可以查看服务器上的任务pipe理器,并在处理结果时观察CPU搅动。

请注意,我不是责怪服务器,因为我可以创buildMDX查询,运行速度非常快,并提供相同的结果。

我怎样才能让Excel生成更高效的MDX? 我正在使用Excel 2010。

我听说powerpivot生成更高效的MDX,但是Powerpivot在SSAS之上不可用,因为它不利用SSAS多维数据集。 因此,为什么在SSAS之上的Powerpivot不起作用的一个短暂的咆哮。 如果您从SSAS导入数据到powerpivot中,那么您实际上所做的就是执行一个巨大的交叉连接,将数据从SSAS迁移到Powerpivot表中。 如果你已经尝试过,你会发现它产生的字段名称/标签,如“属性DimensionCountyCounty名称”…哇真的吗? 然后,您只需使用本地Powerpivot的OLAP引擎处理数据,从而取决于具有64位操作系统的客户端计算机,以便处理合理大小的数据集。 就好像你只是删除了SSAS,把你所有的精力放在构build一个复杂的OLAP数据库以及所有的元数据,计算,聚合等方面。使用SSAS的一半原因是它可以汇总粒度数据在返回给客户端之前,这样客户端就不需要64位的操作系统,也不需要客户端的大量资源。 我真的很努力地使SSAS的动力枢轴可用,但是在尝试了几种方法并且与用户来回之后,它确实没有接近可用的地方。 不要敲Powerpivot,因为我发现它在许多其他情况下是有用的,但是如果您的SSAS多维数据集是您系统的重要组成部分(即计算,在服务器端聚合大量logging等),那么powerpivot似乎是错误的select。

这是我的查询的一个例子:

SELECT NON EMPTY CrossJoin( {[Department Dimension].[Name].[Name]}, {[Finance Month].[Report Year].[Report Year]} ) ON COLUMNS , CrossJoin( {[Department Finance Line Type Dimension].[Display Order].[Display Order] }, {[Department Finance Line Type Dimension].[Line Number].[Line Number]}, {[Department Finance Line Type Dimension].[Display Name].[Display Name]} ) ON ROWS FROM ( SELECT ({[Department Dimension].[County].&[Seminole],[Department Dimension].[County].&[Sarasota]}) ON COLUMNS FROM [HYP Data View] ) WHERE ([Department Finance Line Type Dimension].[Section Name].&[Part 1 - Balance Sheet], [Measures].[Amount] ) CELL PROPERTIES VALUE 

下面是Excel生成的。 我实际上已经删除了Excel查询的其他几个方面,因为我试图简化它来确定是什么罪魁祸首。 这是查询看起来像什么时候仍然运行缓慢,然后我采取的下一个步骤是当我删除DrilldownLevel和replace。[所有]与。[ 属性名称 ],它开始运行快得多。

非常非常慢的查询:

 SELECT NON EMPTY CrossJoin( {DrilldownLevel({[Department Dimension].[Name].[All]})}, {DrilldownLevel({[Finance Month].[Report Year].[All]})} ) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , CrossJoin( {DrilldownLevel({[Department Finance Line Type Dimension].[Display Order].[All] })}, {DrilldownLevel({[Department Finance Line Type Dimension].[Line Number].[All]})}, {DrilldownLevel({[Department Finance Line Type Dimension].[Display Name].[All]})} ) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS FROM ( SELECT ({[Department Dimension].[County].&[Seminole],[Department Dimension].[County].&[Sarasota]}) ON COLUMNS FROM [Afr Data View] ) WHERE ([Department Finance Line Type Dimension].[Section Name].&[Part 1 - Balance Sheet], [Measures].[Amount] ) CELL PROPERTIES VALUE 

为什么需要DrilldownLevel(… [All])? 有没有一个选项,我可以翻转让Excel不生成查询的一部分,以便它会运行得更快?

不幸的是,尽pipe我已经在SSAS MOLAP Cubes上使用过Excel和Pivottables,但是我还没有发现纯Excel中的机制来改变它生成的查询。

然而,我使用了一个叫做XLCubed的第三方工具,这个工具在使用来自SSAS OLAP多维数据集的Excel和MDX查询时function非常强大,我可以build议你试一试吗? 你甚至可以像上面那样用完全自定义的MDXreplace它将用于“Grid”的MDX。 虽然我觉得这通常不是必须的,但是它们replace数据透视表“网格”似乎会产生更高效的MDX。

愿SSAS上帝与你同在。