Power Query - 在两个表中添加列 CountIF 即 =COUNTIF(People[CityId],[@Id])
Power Query - Add Column CountIF across two tables ie =COUNTIF(People[CityId],[@Id])
我在 PowerQuery City
和 People
中有两个 table。
城市
Id, Name
1, Brisbane
2, Sydney
3, Melbourne
人
Id, Name, CityId
1, Jay, 1
2, Sam, 2
3, Paul, 1
4, Sarah, 3
我想向“城市”添加一列,以显示属于该城市的人数。到目前为止我有:
Table.AddColumn(City, "People.Count", each
Table.RowCount(
Table.SelectRows(
People,
each [CityId] = [Id]
)
)
)
这 returns 新列中的所有零。如果我用 1
替换 [Id]
然后我得到 2
.
[]
似乎引用了当前行上的值,但引用了相同的 table 上的值。有什么办法可以写成
Table.AddColumn(City, "People.Count", each
Table.RowCount(
Table.SelectRows(
People,
each People[CityId] = City[Id]
)
)
)
在 Excel 中,这将与
一样基本
=COUNTIF(People[CityId],[@Id])
然后下拉 PEOPLE 中的新列(根据附件 .xlsx)
看起来很简单,但绝对卡住了!哎呀
我会构建一个从 PEOPLE 开始的查询,然后按城市分组并计算计数。
然后我会将 CITY 查询与该新查询合并并展开计数列。
不需要代码或公式 - 它实际上比 Excel 公式更简单。
啊,现在我明白你在追求什么了。使用简单的列有一个绝妙的技巧:
= Table.AddColumn(City, "People.Count", each let Id=[Id] in Table.RowCount(Table.SelectRows(People, each [CityId] = Id)))
您需要将列名定义为变量,以便"leave"您当前"context"(人民table)。
关于如何以不同的方式写这个还有其他答案,但这里最通用的解决方案可能是删除嵌套的 each
语法。
看到您的查询可能会有所帮助
Table.AddColumn(
City,
"People.Count", each
Table.RowCount(Table.SelectRows(
People,
each [CityId] = [Id])))
是这个重写版本的语法糖。在_[CityId] = _[Id]
表达式中,_
变量被绑定到最里面的参数,最外面的_
没有被使用:
Table.AddColumn(
City,
"People.Count", (_) =>
Table.RowCount(Table.SelectRows(
People,
(_) => _[CityId] = _[Id])))
如果你有嵌套的 each
表达式,我会将外部 each
更改为具有真实变量名的函数,如下所示:
Table.AddColumn(
City,
"People.Count", (CityRow) =>
Table.RowCount(Table.SelectRows(
People,
each [CityId] = CityRow[Id])))
我在 PowerQuery City
和 People
中有两个 table。
城市
Id, Name
1, Brisbane
2, Sydney
3, Melbourne
人
Id, Name, CityId
1, Jay, 1
2, Sam, 2
3, Paul, 1
4, Sarah, 3
我想向“城市”添加一列,以显示属于该城市的人数。到目前为止我有:
Table.AddColumn(City, "People.Count", each
Table.RowCount(
Table.SelectRows(
People,
each [CityId] = [Id]
)
)
)
这 returns 新列中的所有零。如果我用 1
替换 [Id]
然后我得到 2
.
[]
似乎引用了当前行上的值,但引用了相同的 table 上的值。有什么办法可以写成
Table.AddColumn(City, "People.Count", each
Table.RowCount(
Table.SelectRows(
People,
each People[CityId] = City[Id]
)
)
)
在 Excel 中,这将与
一样基本=COUNTIF(People[CityId],[@Id])
然后下拉 PEOPLE 中的新列(根据附件 .xlsx)
看起来很简单,但绝对卡住了!哎呀
我会构建一个从 PEOPLE 开始的查询,然后按城市分组并计算计数。
然后我会将 CITY 查询与该新查询合并并展开计数列。
不需要代码或公式 - 它实际上比 Excel 公式更简单。
啊,现在我明白你在追求什么了。使用简单的列有一个绝妙的技巧:
= Table.AddColumn(City, "People.Count", each let Id=[Id] in Table.RowCount(Table.SelectRows(People, each [CityId] = Id)))
您需要将列名定义为变量,以便"leave"您当前"context"(人民table)。
关于如何以不同的方式写这个还有其他答案,但这里最通用的解决方案可能是删除嵌套的 each
语法。
看到您的查询可能会有所帮助
Table.AddColumn(
City,
"People.Count", each
Table.RowCount(Table.SelectRows(
People,
each [CityId] = [Id])))
是这个重写版本的语法糖。在_[CityId] = _[Id]
表达式中,_
变量被绑定到最里面的参数,最外面的_
没有被使用:
Table.AddColumn(
City,
"People.Count", (_) =>
Table.RowCount(Table.SelectRows(
People,
(_) => _[CityId] = _[Id])))
如果你有嵌套的 each
表达式,我会将外部 each
更改为具有真实变量名的函数,如下所示:
Table.AddColumn(
City,
"People.Count", (CityRow) =>
Table.RowCount(Table.SelectRows(
People,
each [CityId] = CityRow[Id])))