将包装表数据转换为列

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

我正在尝试使用power bi进行Web剪贴,其中我正在使用来自以下站点的数据:

https://pt.wikipedia.org/wiki/Jogo_do_bicho

通过站点URL后,数据以以下格式组织:

“屏幕截图1”如果数字是与具有特定千位的动物相关的索引,我如何将所有组织的所有索引列成一列?

我附有示例:

“屏幕截图2”

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

稍后我将尝试添加细节,但我认为这会起作用:

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。现在我们终于可以旋转了。

一旦进行透视,请进行任何清理,例如拆分列,修剪空白,更改列类型,删除不需要的列和排序。

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