将封装的表数据转换为列

问题描述 投票:0回答:1

我正在尝试用power bi做网络搜刮,其中我使用的数据来自以下网站。

https:/pt.wikipedia.orgwikiJogo_do_bicho。

传递网站URL后,数据以如下格式组织起来。

Screenshot 1其中数字是与动物相关的索引 有其特定的千, 我如何把所有的东西组织在一个列 与所有的索引?

我有一个例子附在后面。

Screenshot 2

powerbi datasource powerquery powerbi-desktop m
1个回答
1
投票

我稍后会尝试添加细节,但我认为这将是工作。

let
    Source = Web.Page(Web.Contents("https://pt.wikipedia.org/wiki/Jogo_do_bicho")){0}[Data],
    ToLists = List.Skip(Table.ToColumns(Source),1),
    #"Converted to Table" = Table.FromList(ToLists, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandListColumn(#"Converted to Table", "Column1"),
    #"Added Custom" = Table.AddColumn(#"Expanded Column1", "Pivot", each if Text.Length([Column1]) = 2 then "Group" else "Animal"),
    #"Added Index" = Table.AddIndexColumn(#"Added Custom", "Index", 0, 1),
    #"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
    #"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Pivot]), "Pivot", "Column1"),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Pivoted Column", "Animal", Splitter.SplitTextByDelimiter("#(lf)#(cr)", QuoteStyle.Csv), {"Animal", "Values"}),
    #"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter",{{"Animal", Text.Trim, type text}, {"Values", Text.Trim, type text}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Trimmed Text",{{"Group", Int64.Type}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Index"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Group", Order.Ascending}})
in
    #"Sorted Rows"

编辑: 这里的关键是将表格转换为一个列的列表,使用的是 Table.ToColumns. 这就把它变成了一个列表,我们可以把它转换成一个表,并展开成一个长列。

一旦所有的列都堆叠成一个单一的列,我们就想把组ID和细节分开,在这种情况下,我们可以通过检查文本的长度和定义一个自定义列来实现,这个自定义列用不同的数据类别来标记每一行。

在对行进行分类后,我们要对那个新的自定义列进行透视,但我们要有一个索引列,这样它就知道哪些内容会留在一起。添加一个索引列和整数除以二,这样你就会得到 0,0,1,1,2,2,3,3,... 使得每个对子都有自己唯一的ID。现在我们终于可以进行pivot了。

一旦进行了pivot,就可以进行任何你想做的清理工作,例如,分割列、修剪空白、改变列类型、删除不需要的列和排序。

© www.soinside.com 2019 - 2024. All rights reserved.