【问题标题】:How to merge tables and include unmatched records as 0 instead of null?如何合并表并将不匹配的记录包含为 0 而不是 null?
【发布时间】:2019-04-04 21:06:49
【问题描述】:

我在 Power Query 中有两个表:Analytics 和 Inventory。我需要将它们合并在一起,以便将存在的 Analytics 记录添加到 Inventory 表中,并且在没有匹配项的情况下,“访问”列变为 0。我使用 Page/URL 作为链接列。

库存表

URL   | Created By
Page1 | John
Page2 | Mike
Page3 | Scot

分析表

Page  | Visits
Page1 | 12
Page2 | 10
Page5 | 5

所需结果表

URL   | Created By | Visits
Page1 | John       | 12
Page2 | Mike       | 10
Page3 | Scot       | 0

在 Power Query 中进行合并之前,我使用 Text.Trim、Text.Lower、Remove Rows (Remove Duplicates and Remove Blank Rows) 和 Table.SelectRows 清理了 Page/URL 中的数据,以删除任何记录一个空页面/URL。

我使用 Inventory :: Analytics 进行了左外连接,但当我按页面查找访问时,访问显示为“空白”而不是 0。我试图通过在 Power Query Table.ReplaceValue(referenceToAboveLine, null, 0,Text.Replace, {Analytics}) 中合并后添加以下代码来解决此问题,但这导致查询花费了很长时间,我不得不超时。

我哪里出错了?我是否使用了错误的加入方法?合并后有没有更好的方法来替换空值?

【问题讨论】:

  • 是否有理由需要 0 而不是 null?如果是这样,您将整数存储为文本是否还有一个原因 ("0")。
  • @AlexisOlson 编辑了引号,因为它是整数而不是文本。并且需要记录为 0,以便我可以安全地在该字段上运行计算,并且还因为任何不匹配的记录在访问计数中都是 0,最终用户会理解 0,但不一定是 null 的含义

标签: powerbi powerquery


【解决方案1】:

根据我的经验,DAX 可以很好地处理空值,因此我不确定您是否需要为计算目的进行转换,但假设您这样做了。

可以试试Table.Transform,而不是Table.ReplaceValue

Table.TransformColumns(
    referenceToAboveLine,
    {{"Visits", each if _ = null then 0 else _, Int64.Type}}
)

【讨论】:

  • 我在尝试转换时遇到的问题是找不到表的“Visits”列。我只能通过将列引用从访问更改为分析来使代码工作(这似乎非常错误,因为我只想将其应用于访问列而不是合并的整个分析表)。虽然后者会产生“可接受的”查询语言,但在实际运行查询时会返回错误。
  • 在合并并展开后使用您命名该列的任何名称,而不是“访问次数”。
  • 这里的关键词是“扩展”。我没有展开表格,因此即使它被合并了也无法访问该列。一旦我展开上面的代码工作。
  • 对。在展开之前,您将使用一列表格而不是数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2018-01-08
相关资源
最近更新 更多