我目前有两张桌子。我有一个表格,其中包含一个位置列表:
萨格勒布(克罗地亚)
美国华盛顿州西雅图
纽约州纽约市
哈萨克斯坦,阿拉木图
我还有一个20万个城市的主列表,看起来像这样:
萨格勒布|克罗地亚
西雅图| USA
纽约市| USA
阿拉木图|哈
我想要的输出是在第一个表中添加一个新列,如下所示:
萨格勒布(克罗地亚)|克罗地亚
美国华盛顿州西雅图| USA
纽约州纽约市| USA
哈萨克斯坦,阿拉木图|哈
这是从实时源更新的,我无法控制数据质量,因此任何解决方案都必须是动态的。
任何想法都赞赏!
答案 0 :(得分:1)
一种可能的方法是在第一个表格中添加一个自定义列,搜索字符串中第二个表格City
列中显示的所有城市。
= Table.AddColumn(#"Changed Type", "City",
(L) => List.Select(Cities[City], each Text.Contains(L[Location], _)))
这给出了匹配城市的列表。展开该列表以获取以下内容:
然后,您可以与Cities
表合并(在每个表的City
列上进行匹配)以覆盖Country
列。
以下是来自高级编辑器的查询全文:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WikpML0pNUtBwLspPLMlM1FSK1YlWCk5NLCnJSdVRCHfUUQgNdgQL+qWWK0TmF2UrOGeWVOoo+EWCRb0TqxKzM4pLEvN0FBxzchNLKpViYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Location = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Location", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "City", (L) => List.Select(Cities[City], each Text.Contains(L[Location], _))),
#"Expanded City" = Table.ExpandListColumn(#"Added Custom", "City"),
#"Merged Queries" = Table.NestedJoin(#"Expanded City",{"City"},Cities,{"City"},"Cities",JoinKind.LeftOuter),
#"Expanded Cities" = Table.ExpandTableColumn(#"Merged Queries", "Cities", {"Country"}, {"Country"})
in
#"Expanded Cities"
答案 1 :(得分:0)
将第一个表命名为" location",包括1个名为" location"的列。 将第二个表命名为" city",包括2列名为" city"和#34;国家"。 代码是:
let
location = Excel.CurrentWorkbook(){[Name="location"]}[Content],
city = Excel.CurrentWorkbook(){[Name="city"]}[Content],
result = Table.AddColumn(location,"city",each Table.SelectRows(city,(x)=>Text.Contains([location],x[city]))[country]{0})
in
result