2

我有一个简单的表格模型,由一个事实表组成,大约。20 米奥。记录(销售交易)和包含大约 600.000 条记录(客户)的维度表。

一个典型的报告场景是通过事实表中的某个度量来获取前 10 名客户,可能通过其他一些标准(通常是时间段、产品等)进行过滤。

在 Excel 中,聚合所有 20 个 mio。返回总销售额的记录是即时的。但是,一旦我尝试按客户分组,检索所有数据需要一些时间(15-20 秒),这是有道理的,因为需要显示相当多的客户(600.000)。

现在,如果我在 Excel 中应用值过滤器,只获取前 10 名客户,返回结果仍然需要大约 15-20 秒,这对我的用户来说是不可接受的(因为他们希望立即看到前 10 名客户同时对其他属性(如产品、时间等)进行切片。

在内部,Excel 在使用TOPCOUNT值过滤器查询表格模型时使用 MDX 函数。

我可以在表格模型中做些什么来加速这类查询吗?

我试过了:

  • 在维度表上创建一个计算列,包含每个客户的总销售额。虽然性能更好,但这不是要走的路,因为该列中的值不能被事实中的其他属性切片,并且该列显然最终包含许多不同的值(这在表格中是一件坏事)。
  • 使用此处RANKX建议的 DAX 函数在事实表上创建计算度量。这导致我的表格实例崩溃(维度表中的记录太多?)
  • TOPN使用 DAX函数直接在表格模型上执行简单的 DAX 语句。这甚至比TOPCOUNTMDX 方法慢 3-4 倍。
4

1 回答 1

1

在网上搜索了一些并执行了额外的测试之后,我得出的结论是,SSAS 表格在未经过滤的上下文中回答 TOPCOUNT/RANK 类型的查询本身就很糟糕。原因似乎很简单:

如果我有一个包含 600.000 名客户的维度,并且我在未过滤的上下文中按销售额查询前 10 名,则表格引擎需要计算每个客户的销售额总和,然后才能排序并返回前 10 名或每个客户的排名。

在多维 OLAP 中,数据通常预先聚合在 pr 上。客户级别,这意味着多维立方体可以更快地回答这些类型的查询。

在 SSAS 表格中应用一个或多个过滤器(例如当月、特定产品等)时,我看到了显着的性能提升。就我而言,解决方案是教育我的用户在将客户维度包含在他们的数据透视表中之前始终过滤他们的数据。

于 2014-10-27T11:26:37.423 回答