自动为 Power Query 和 DAX 中的未分类行分配类别

对数据进行分类就是报告中的一切。未分类的数据无法进行分组和聚合。但有时我们必须按照一定的规则为未分类的数据分配类别。让我们看看我是如何在设施管理项目中解决这个问题的。自动为 Power Query 和 DAX 中的未分类行分配类别一文首先出现在 Towards Data Science 上。

来源:走向数据科学

场景

报告席位所有权。

办公楼中的每个席位必须分配给一个组织单位 (OU)。

有一个所有席位的列表,并且应该为每个席位设置所属OU。但有些席位没有所属 OU 集。

因此,他们决定将所有未分配的席位分配给拥有最多席位的 OU。

这必须按房间和楼层完成。

看下面的平面图:

查看 B 房间中标记的座位。

正如您所注意到的,“OU 3”拥有该房间中最多的座位。

因此,这些席位必须分配给该 OU。

但从整个楼层来看,“OU 5”在所有房间中拥有最多的座位。

如果该楼层有一个房间未分配所有座位,则必须将其分配到“OU 5”。

这些是分配未分配席位的业务规则。

数据源

所有数据都存储在 Excel 文件中。

每个文件的文件名开头都有一个日期。

例如:

  • 20260331_Seatlist.xlsx
  • 20260430_Seatlift.xlsx
  • 20260531_Seatlist.xlsx
  • 每月有一个文件,其中包含建筑物中的所有现有席位及其当月的分配。

    这是因为分配会随着时间而变化,并且用户必须能够看到差异。

    但只能使用最新的数据集(Excel 文件)来分配未分配的席位。

    在 Power Query 中执行此操作

    正如您可能从我之前的文章中了解到的那样,我的目标是在负载链中尽早执行数据转换。

    因此,很自然地开始在 Power Query 中进行工作。

    我需要对没有分配 OU 的每一行执行以下步骤:

  • 在所有加载的文件中查找最新的文件
  • 阅读此文件
  • 搜索当前房间的行(当前行的房间)
  • 计算该房间中每个 OU 的座位数
  • 按座位数降序排列
  • 仅保留第一行 - OU 席位数最多的行
  • 将该 OU 分配给当前行
  • 为此,我创建了一个 M 函数 [CheckMax_ForSeat]。

    1.查找最新文件:

    2.读取文件:

    但是然后...