Forum Discussion
Mike1983
2 years agoRegular Visitor
How to count consecutive date ranges in Power Query M?
Hello! Hopefully someone can help me! I have a table of absence start and end dates (300k rows). Where absences are consecutive (previous end date is the day before the next start date), I want t...
- 2 years ago
Hi Mike1983,
Result:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ddDRCoAgDIXhd/FaYjuW1bOI7/8atgg7jSbe/PDBdK0lyH005SS6XBeC1QIzev4w3YjpHrKD2RkxCDEKz/htFJ6BWfgFFGYlYrYQzIW88bOQySg8q8xqxGxO4aFP9D4A", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Person = _t, #"Abs Start" = _t, #"Abs End" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Abs Start", type date}, {"Abs End", type date}}, "sk-SK"), #"Added Index1" = Table.AddIndexColumn(#"Changed Type", "IndexHelper", 0, 1, Int64.Type), #"Added Dates" = Table.AddColumn(#"Added Index1", "Dates", each List.Dates([Abs Start], Duration.TotalDays([Abs End] - [Abs Start])+1, #duration(1,0,0,0)), type list), #"Expanded Dates" = Table.ExpandListColumn(#"Added Dates", "Dates"), #"Added Index" = Table.AddIndexColumn(#"Expanded Dates", "Index", 0, 1, Int64.Type), #"Grouped Rows" = Table.Group(#"Added Index", {"Person", "Dates", "Index"}, { {"All", each _, type table}, {" Consecutive Abs Start", each List.Min([Dates]), type date}}, GroupKind.Local, (s,c)=> Byte.From(c[Index]-s[Index] <> Duration.Days(c[Dates]-s[Dates]))), #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Abs Start", "Abs End", "IndexHelper"}, {"Abs Start", "Abs End", "IndexHelper"}), #"Removed Duplicates" = Table.Distinct(#"Expanded All", {"IndexHelper"}), #"Removed Columns" = Table.RemoveColumns(#"Removed Duplicates",{"IndexHelper", "Dates", "Index"}) in #"Removed Columns"
dufoq3
2 years agoCommunity Champion
Hi Mike1983,
Result:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ddDRCoAgDIXhd/FaYjuW1bOI7/8atgg7jSbe/PDBdK0lyH005SS6XBeC1QIzev4w3YjpHrKD2RkxCDEKz/htFJ6BWfgFFGYlYrYQzIW88bOQySg8q8xqxGxO4aFP9D4A", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Person = _t, #"Abs Start" = _t, #"Abs End" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Abs Start", type date}, {"Abs End", type date}}, "sk-SK"),
#"Added Index1" = Table.AddIndexColumn(#"Changed Type", "IndexHelper", 0, 1, Int64.Type),
#"Added Dates" = Table.AddColumn(#"Added Index1", "Dates", each List.Dates([Abs Start], Duration.TotalDays([Abs End] - [Abs Start])+1, #duration(1,0,0,0)), type list),
#"Expanded Dates" = Table.ExpandListColumn(#"Added Dates", "Dates"),
#"Added Index" = Table.AddIndexColumn(#"Expanded Dates", "Index", 0, 1, Int64.Type),
#"Grouped Rows" = Table.Group(#"Added Index",
{"Person", "Dates", "Index"}, { {"All", each _, type table}, {" Consecutive Abs Start", each List.Min([Dates]), type date}},
GroupKind.Local,
(s,c)=> Byte.From(c[Index]-s[Index] <> Duration.Days(c[Dates]-s[Dates]))),
#"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Abs Start", "Abs End", "IndexHelper"}, {"Abs Start", "Abs End", "IndexHelper"}),
#"Removed Duplicates" = Table.Distinct(#"Expanded All", {"IndexHelper"}),
#"Removed Columns" = Table.RemoveColumns(#"Removed Duplicates",{"IndexHelper", "Dates", "Index"})
in
#"Removed Columns"