【问题标题】:Convert DAX function (incl. ALLEXCEPT, AVERAGE) to PowerQuery's M将 DAX 函数(包括 ALLEXCEPT、AVERAGE)转换为 PowerQuery 的 M
【发布时间】:2021-06-28 09:25:34
【问题描述】:

我是 PowerBI 的新手(但我知道编码和 SQL),所以我的问题可能很简单或在其他地方得到解答 - 我很高兴有任何进展。

我应该计算每个月和货币对的平均汇率,因此按其他列分组和排序。这一切都应该发生在 Power Query 中,但我不知道如何在 M 中体现这一点。

在 DAX 中,我得出了一个可用(但并不完美)的公式:

RATE_AVG_MONTH = IF (
  (Source_Tab[SOURCE_SYSTEM] == "System_1"),
  CALCULATE(AVERAGE(Source_Tab[RATE_AVG_DAILY]),
            ALLEXCEPT(Source_Tab, Source_Tab[CURRENCY_A], Source_Tab[CURRENCY_B], Source_Tab[MONTH], Source_Tab[YEAR])
  ),
)

这里仍然缺少结果应该是“ORDERed BY Source_Tab[YEAR]”。

这如何用 M 表示?

【问题讨论】:

  • 如果你真的想,你可以写出这样的计算; Table.Group 显示了一个分组示例(带有总和),但在这方面它与 DAX 完全不同,因此有相当长的学习曲线。它也没有像 DAX 那样针对这种计算进行完全优化;它在过滤和转换方面大放异彩。如果您不想在客户端使用 DAX,通常最好在源端进行计算(例如在 SQL 中),并让 M 仅在必要时通过少量转换导入数据。
  • 感谢您的提示。我不想在 DAX 中进行计算,因为在查询转换中应该删除一列(s.t. 它不在报告中),但这是真的:最好在 SQL 中执行此操作。

标签: sql powerbi powerquery powerbi-desktop powerbi-datasource


【解决方案1】:

假设您采用 Source_Tab 上存在的每日费率的直接平均值 在 M 中进行这种转换(使用 GUI 比使用代码更容易): 在 Source_Tab 上,通过控制单击列来选择货币 A、货币 B、月份和年份,然后单击“分组依据”。 在“新列名”中,为您的列命名,将操作更改为平均,然后选择列中的比率字段。

如果您正在做一些更复杂的事情,例如尝试从一天内的一组交易中得出平均费率,然后将该费率平均到一个月,您只需执行两次此操作,每天分组一次,然后按月和年进行第二次。

我同意上述评论,即 M 不适合这样做。它绝对可以进行这种转换,但可能会有更有效的地方来做到这一点。

【讨论】:

  • 感谢您的回答!正如你和 Jeroen 所提议的,我会尽量不在 M 中进行这种转换。但更早一点,到源代码的 SQL 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多