Dax vs M(power query)表组合大表的最佳实践

Posted

技术标签:

【中文标题】Dax vs M(power query)表组合大表的最佳实践【英文标题】:Dax vs M (power query) tables the best practice for combining large tables 【发布时间】:2020-04-25 10:21:30 【问题描述】:

垂直组合两个相同结构的大表的最佳方法是什么。每个表大约有 200 万行。在 M 中而不是在 DAX 中是否有任何性能优势

M 方法

BigTable_M  = Table.Combine( Table1, Table2 )

DAX 方法

BigTable_DAX = UNION ( 'Table1', 'Table2' )

我感觉 M 方式加载了两次表格。在将行加载到 BigTable_M 时,将每个主源(Table1 和 Table2)分开,然后再将两个表分开。是否有任何理由承受这种双重负载以获得更好的性能?

通过这篇文章,M 似乎更快。

https://www.sqlbi.com/articles/comparing-dax-calculated-columns-with-power-query-computed-columns/

【问题讨论】:

【参考方案1】:

最佳做法是先在 M/Power Query 中执行此操作,然后再将数据加载到数据模型中。您总是希望数据模型快速且响应迅速,并且计算开销最小。我总是建议从最低级别开始工作,例如,如果您可以在源代码中执行,则在此处执行,如果您无法在 Power Query 中执行,最后在 Dax/ 中执行动力枢轴部分。 如果您使用的是数据库,这很有效,因为您让旨在完成繁重的数据提升/转移的技术,而不是在 Power BI 中完成所有工作。

如果您正在处理文件,那么最好在 Power Query 部分执行此操作,并再次让 Power Pivot 引擎尽可能快。

在咨询客户数据模型(包括 Power BI 和分析服务)时,大部分麻烦来自于在数据模型中做一些事情,而不是在那之前做。例如,数据类型转换、字符串替换、迭代计算、排名等,最好在它到达模型之前就做好。

【讨论】:

我会很感激指出文档说明 M 在此目的上比 DAX 更快。或者分享使用 Daxstudio 衡量性能的个人经验。【参考方案2】:

在查询编辑器中执行此操作,您可以选择仅将组合表加载到您的数据模型中,而 Table1Table2 仅作为临时表存在。这应该可以解决您对两次加载表的担忧。

我希望将它们组合在 M 中会产生更好的压缩效果(尽管差异可能不是很大)。在某些情况下,在 M 中组合还允许查询折叠。

【讨论】:

如何设置?我应该禁用表 1 和表 2 的启用数据加载吗?我应该将它们隐藏在数据模型中吗?我应该让它们勾选“包括在报告刷新中”吗? 取消选中表 1 和表 2 的“启用加载”。然后它们不会加载到数据模型中,因此您不必担心隐藏它们。大表仍需要加载到模型中,如果您希望大表可刷新,则需要为表 1 和表 2 选中“包括在报告刷新中”。 我有一种可怕的感觉,使用 M 方法从服务器读取数据两次。会不会是这样?我预计BigTable_M = Table.Combine( Table1, Table2 ) 将“即时”完成,因为之前的两个表都已从服务器中吸取。在刷新期间,它显示来自服务器的 BigTable_M xxx 行,这让我很开心。

以上是关于Dax vs M(power query)表组合大表的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 DAX 或 Power Query 中自引用列

谈一谈你在powerbi或者powerquery中学到的技能?以及怎么解决实际问题?

Excel 表之间的组合的 Power Query 是啥?

power query怎样设置M函数的字符区间

使用 T-SQL、DAX 或 M Query 在值更改后创建 StartDate 和 EndDate 列

数据可视化之DAX篇(十五)Power BI按表筛选的思路