如何清除power bi中的位置数据

时间:2018-05-23 13:45:22

标签: powerbi powerquery data-cleaning

我目前有两张桌子。我有一个表格,其中包含一个位置列表:

  

萨格勒布(克罗地亚)

     

美国华盛顿州西雅图

     

纽约州纽约市

     

哈萨克斯坦,阿拉木图

我还有一个20万个城市的主列表,看起来像这样:

  

萨格勒布|克罗地亚

     

西雅图| USA

     

纽约市| USA

     

阿拉木图|哈

我想要的输出是在第一个表中添加一个新列,如下所示:

  

萨格勒布(克罗地亚)|克罗地亚

     

美国华盛顿州西雅图| USA

     

纽约州纽约市| USA

     

哈萨克斯坦,阿拉木图|哈

这是从实时源更新的,我无法控制数据质量,因此任何解决方案都必须是动态的。

任何想法都赞赏!

2 个答案:

答案 0 :(得分:1)

一种可能的方法是在第一个表格中添加一个自定义列,搜索字符串中第二个表格City列中显示的所有城市。

 = Table.AddColumn(#"Changed Type", "City",
       (L) => List.Select(Cities[City], each Text.Contains(L[Location], _)))

这给出了匹配城市的列表。展开该列表以获取以下内容:

Cities

然后,您可以与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