慢速Excel数据透视表MDX?

时间:2011-09-08 20:02:38

标签: excel ssas mdx

每当与数据透视表进行交互时,Excel都会非常困难。添加/删除字段,更改过滤器或切片器,都需要几分钟的Excel被冻结才能响应。

似乎生成的MDX效率极低。我可以理解他们必须动态生成MDX并且必须支持数据透视表的许多功能,但速度慢100倍是荒谬的。

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

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

相反,我通常会省略Drilldownlevel功能,只需执行[Property Dimension]。[County] 。[County] 来访问该属性。

使用Excel的MDX对同一结果集进行查询需要5分钟,使用我的MDX只需不到5秒。

我已经验证了Excel渲染/格式化结果的速度不是很慢,因为我使用了Excel使用的MDX并直接在SSMS中运行它来验证时间。我可以在服务器上查看任务管理器,并在处理结果时观察CPU的流失。

注意,我不会责怪服务器,因为我可以创建运行速度极快且提供相同结果的MDX查询。

如何让Excel生成更高效的MDX?我正在使用Excel 2010.

我听说powerpivot会生成更高效的MDX,但是Powerpivot在SSAS之上不可用,因为它没有利用SSAS多维数据集。因此,对于为什么Powerpivot在SSAS之上不起作用的短暂咆哮。如果您将数据从SSAS导入powerpivot,那么您实际上正在执行的是执行巨型交叉连接以将数据从SSAS迁移到Powerpivot表中。如果你试过这个,你会发现它会生成字段名称/标签,例如“Property DimensionCountyCounty Name”......哇真的吗?然后,您只需使用本地Powerpivot的OLAP引擎处理数据,因此依赖于具有64位操作系统的客户端计算机,以便使用合理大小的数据集。就好像你只是在削减SSAS,抛弃所有努力构建复杂的OLAP数据库以及所有元数据,计算,聚合等等。使用SSAS的一半原因是它可以汇总粒度数据在它返回客户端之前,客户端不需要64位操作系统,并且客户端上不需要大量资源。我非常努力地使用反对SSAS的powerpivot可用,但在尝试了几种方法并且与用户来回之后,它真的没有接近可用的地方。不要敲Powerpivot,因为我认为它在许多其他场景中都很有用,但是如果你的SSAS多维数据集是你系统的一个重要部分(即计算,聚合服务器端的大量记录等)那么powerpivot似乎是错误的选择

以下是我的查询示例:

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并替换。[All] with。[ Attribute Name ]它开始运行时更快。

非常慢的查询:

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不生成查询的那一部分,以便它运行得更快?

1 个答案:

答案 0 :(得分:1)

不幸的是,虽然我已经在SSAS MOLAP Cubes上广泛使用了Excel和数据透视表,但我还没有在纯Excel中找到一种机制来改变它生成的查询。

然而,我使用了一个名为XLCubed的第三方工具,当使用SSAS OLAP Cubes的Excel和MDX查询时功能非常强大,我建议您尝试一下吗?您甚至可以替换它将用于" Grid"如上所述,完全定制的MDX。虽然我发现通常不需要更换数据透视表" Grid"似乎通常会产生更有效的MDX。

愿SSAS众神与你同在。