我有一个简单的表格模型,由一个事实表组成,大约。20 米奥。记录(销售交易)和包含大约 600.000 条记录(客户)的维度表。
一个典型的报告场景是通过事实表中的某个度量来获取前 10 名客户,可能通过其他一些标准(通常是时间段、产品等)进行过滤。
在 Excel 中,聚合所有 20 个 mio。返回总销售额的记录是即时的。但是,一旦我尝试按客户分组,检索所有数据需要一些时间(15-20 秒),这是有道理的,因为需要显示相当多的客户(600.000)。
现在,如果我在 Excel 中应用值过滤器,只获取前 10 名客户,返回结果仍然需要大约 15-20 秒,这对我的用户来说是不可接受的(因为他们希望立即看到前 10 名客户同时对其他属性(如产品、时间等)进行切片。
在内部,Excel 在使用TOPCOUNT
值过滤器查询表格模型时使用 MDX 函数。
我可以在表格模型中做些什么来加速这类查询吗?
我试过了:
- 在维度表上创建一个计算列,包含每个客户的总销售额。虽然性能更好,但这不是要走的路,因为该列中的值不能被事实中的其他属性切片,并且该列显然最终包含许多不同的值(这在表格中是一件坏事)。
- 使用此处
RANKX
建议的 DAX 函数在事实表上创建计算度量。这导致我的表格实例崩溃(维度表中的记录太多?) TOPN
使用 DAX函数直接在表格模型上执行简单的 DAX 语句。这甚至比TOPCOUNT
MDX 方法慢 3-4 倍。