每当与数据透视表进行交互时,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不生成查询的那一部分,以便它运行得更快?
答案 0 :(得分:1)
不幸的是,虽然我已经在SSAS MOLAP Cubes上广泛使用了Excel和数据透视表,但我还没有在纯Excel中找到一种机制来改变它生成的查询。
然而,我使用了一个名为XLCubed的第三方工具,当使用SSAS OLAP Cubes的Excel和MDX查询时功能非常强大,我建议您尝试一下吗?您甚至可以替换它将用于" Grid"如上所述,完全定制的MDX。虽然我发现通常不需要更换数据透视表" Grid"似乎通常会产生更有效的MDX。
愿SSAS众神与你同在。