Group by when the order is important

Hi guys, in this video we gonna see how to use the parameter GroupKind.Local in the function Table.Group.

Our goal today is to transform the List of Naruto episodes on Wikipedia into a simple table to know what interval of episodes is a filler. In the end, we will have a table like this:

The code we use for this list is:

let
    Source = Web.Page(Web.Contents("https://pt.wikipedia.org/wiki/Lista_de_epis%C3%B3dios_de_Naruto")),
    #"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Caption], "emporada")),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Data"}),
    #"Expanded Data" = Table.ExpandTableColumn(#"Removed Other Columns", "Data", {"Nº", "Título original", "Título original2", "Título(s) em português", "Data de estreia"}, {"Nº", "Título original", "Título original2", "Título(s) em português", "Data de estreia"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Expanded Data",{"Nº"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns1"),
    #"Filtered Rows1" = Table.SelectRows(#"Removed Duplicates", each (Text.Length([Nº]) < 20)),
    #"Replaced Value" = Table.ReplaceValue(#"Filtered Rows1","
","@",Replacer.ReplaceText,{"Nº"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value", "Nº", Splitter.SplitTextByDelimiter("@", QuoteStyle.Csv), {"Nº.1", "Nº.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Nº.1", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Nº.2"}, {{"Min", each List.Min([Nº.1]), type nullable number}, {"Max", each List.Max([Nº.1]), type nullable number}}, GroupKind.Local),
    #"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"Min"}, FromTo, {"Nº.1"}, "FromTo", JoinKind.LeftOuter),
    #"Merged Queries1" = Table.NestedJoin(#"Merged Queries", {"Max"}, FromTo, {"Nº.1"}, "FromTo.1", JoinKind.LeftOuter),
    #"Expanded FromTo" = Table.ExpandTableColumn(#"Merged Queries1", "FromTo", {"Ep"}, {"Ep Min"}),
    #"Expanded FromTo.1" = Table.ExpandTableColumn(#"Expanded FromTo", "FromTo.1", {"Ep"}, {"Ep Max"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded FromTo.1",{"Min", "Max", "Ep Min", "Ep Max", "Nº.2"}),
    #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Nº.2", "Type"}})
in
    #"Renamed Columns"

An for the from-to table:

let
    Source = Web.Page(Web.Contents("https://pt.wikipedia.org/wiki/Lista_de_epis%C3%B3dios_de_Naruto")),
    #"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Caption], "emporada")),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Caption", "Data"}),
    #"Added Index" = Table.AddIndexColumn(#"Removed Other Columns", "T", 1, 1, Int64.Type),
    #"Expanded Data" = Table.ExpandTableColumn(#"Added Index", "Data", {"Nº", "Título original", "Título original2", "Título(s) em português", "Data de estreia"}, {"Nº", "Título original", "Título original2", "Título(s) em português", "Data de estreia"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Expanded Data",{"T", "Nº"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns1"),
    #"Filtered Rows1" = Table.SelectRows(#"Removed Duplicates", each (Text.Length([Nº]) < 20)),
    #"Grouped Rows" = Table.Group(#"Filtered Rows1", {"T"}, {{"All", each Table.AddIndexColumn(_, "E", 1, 1, Int64.Type), type table [T=number, Nº=text, E=number]}}),
    #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Nº", "E"}, {"Nº", "E"}),
    #"Replaced Value" = Table.ReplaceValue(#"Expanded All","
","@",Replacer.ReplaceText,{"Nº"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value", "Nº", Splitter.SplitTextByEachDelimiter({"@"}, QuoteStyle.Csv, false), {"Nº.1", "Nº.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Nº.1", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Ep", each "T" & Number.ToText([T], "00") & "E" & Number.ToText([E], "00")),
    #"Removed Other Columns2" = Table.SelectColumns(#"Added Custom",{"Nº.1", "Ep"})
in
    #"Removed Other Columns2"

Check the video to see the step-by-step.

Leave a Reply

Your email address will not be published. Required fields are marked *