我有一个简单的表格模型,由一个大约是事实表组成。20米。记录(销售事务)和约600.000条记录(客户)的维度表。
一个典型的报告场景是通过事实表中的某些度量获取前10名客户,可能会被其他一些标准(通常是时间段、产品等)过滤。
在Excel中,汇总所有的20兆。记录返回的总销售额是即时的。但是,一旦我尝试按客户分组,检索所有数据需要一些时间(15-20秒),这是有意义的,因为需要显示大量的客户(600.000)。
现在,如果我在Excel中应用一个值过滤器,只获得前十名客户,返回结果仍然需要大约15-20秒,这对我的用户来说是不可接受的(因为他们希望立即看到前10位客户,同时对产品、时间等其他属性进行切片)。
在内部,Excel在使用值筛选器查询表格模型时使用TOPCOUNT MDX-函数.
在表格模型中,我能做些什么来加速这些查询吗?
我试过:
RANKX函数在事实表上创建计算的度量。这导致我的表格实例崩溃(维度表中的记录太多了?)TOPN函数直接在表格模型上执行一个简单的DAX语句。这甚至比TOPCOUNT MDX方法慢3-4倍.发布于 2014-10-27 11:26:37
在搜索了更多的web并执行了额外的测试之后,我得出结论: SSAS表格在未过滤的上下文中回答TOPCOUNT/RANK类查询本质上是不好的。原因似乎很简单:
如果我有一个包含600.000个客户的维度,并且在一个未经过滤的上下文中按销售额要求获得前10名,那么表格引擎需要计算每个客户的销售额之和,然后才能对前10位或每个客户的排名进行排序和返回。
在多维OLAP中,数据通常是预先聚合在pr上的。客户级别,这意味着多维多维数据集能够更快地回答这类查询。
在SSAS表格中应用一个或多个过滤器(例如,当前月份、特定产品等)时,我看到了显著的性能提高。在我的例子中,解决方案是教育我的用户在将客户维度包括在他们的PivotTables中之前总是过滤他们的数据。
https://stackoverflow.com/questions/26404036
复制相似问题