Forum Discussion
Add missing rows with missing date and time in Power query
- 2 years ago
Filling down should come after replacing null with something else so the replacement is included in the filldown as well.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("fdBNCoAgEAXgq4hrwxnHH2jXAYL24qLaWq26f0Vhgel2+HiPN97zcZobAEQuuJUoFSgtGKoWgHX9eUTgQZRYUuseY9m9aVRJo6T0j6KvGi5lfpR7lE7K3mpb1gZrKyssKVNGb5QrI6r25QspR/nA61nhAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, #"DateTime Value" = _t, Value = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"DateTime Value", type datetime}, {"Value", Int64.Type}}, "en-US"), #"Replaced Value" = Table.ReplaceValue(#"Changed Type",null,"this is null",Replacer.ReplaceValue,{"Value"}), #"Grouped Rows" = Table.Group(#"Replaced Value", {"ID"}, {{"MinDateTime", each List.Min([DateTime Value]), type nullable datetime}, {"MaxDateTime", each List.Max([DateTime Value]), type nullable datetime}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "DateTime Value", each List.DateTimes([MinDateTime], Number.Round( (Number.From([MaxDateTime])-Number.From([MinDateTime])) * 24, 0) + 1, #duration(0,1,0,0))), #"Expanded DateTime Value" = Table.ExpandListColumn(#"Added Custom", "DateTime Value"), #"Removed Columns" = Table.RemoveColumns(#"Expanded DateTime Value",{"MinDateTime", "MaxDateTime"}), #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns",{{"DateTime Value", type datetime}}), #"Combined Original and Expanded Dates" = Table.Combine({#"Replaced Value", #"Changed Type1"}), #"Changed Type2" = Table.TransformColumnTypes(#"Combined Original and Expanded Dates",{{"Value", type text}}), #"Sorted Rows" = Table.Sort(#"Changed Type2",{{"ID", Order.Ascending}, {"DateTime Value", Order.Ascending}, {"Value", Order.Descending}}), #"Applied Table.Buffer" = Table.Buffer(#"Sorted Rows"), #"Removed Duplicates" = Table.Distinct(#"Applied Table.Buffer", {"ID","DateTime Value"}), #"Filled Down" = Table.FillDown(#"Removed Duplicates",{"Value"}), #"Replaced Value1" = Table.ReplaceValue(#"Filled Down","this is null",null,Replacer.ReplaceValue,{"Value"}), #"Changed Type3" = Table.TransformColumnTypes(#"Replaced Value1",{{"Value", Int64.Type}}) in #"Changed Type3" - 2 years ago
Glad it did. Could you please accept my pose as solution?
danextian The code from you add a duplicate of each line I have. For example, if I have 3 linea for the same ID, with 6/1/2024, 1:00 AM, 6/2/2024 2:00 AM , 6/2/2024, 7:00 AM , the code will just duplicate those 3 lines, I need to return all missing rows between these intervals: 6/1/2024 2:00AM, 6/1/2024 3 AM, 6/1/2024, 4:00 AM etc
I checked on my code and they're not supposed to return duplicates caused I removed then in the process. You can see below that after 3 AM, 4 AM comes next and so on and so forth.
- GiaD302 years agoHelper II
danextian Thank you again, I will re check.
one other mention: on the values, for the missing rows that I add, I dont want to see null, I need to see the value from the last timestamp. For example: If I have a row with 6/1/2024 , 3:00 AM , value = 20, the next row is 6/2/6, 1:00 AM, value= 10, when I add my missing rows between these 2 dates, the value should be 20, from the last row I had a time stamp. - GiaD302 years agoHelper II
danextian You were right, it worked 🙂 thank you very much. Now, the only think that you could help me, please, instead of null on the values for the rows I add, to add the value from the latest row I have in my initial table.
- danextian2 years agoSuper User
I did ask what to do with the values for the added rows. If you want copy the value from the latest non-blank row before the added row, you can right click the column and select fill down. It will fill every blanks with the value of the immediately preceding non-blank row.
- GiaD302 years agoHelper II
danextian Thank you very much, it works perfectly:). But I realized I missed to share one thing: my original table, before adding missing rows, has also rows where the values are null(blank). Now, when I add my missing rows, on the Values column, I need to take into consideration also the null . For example, If I have 4 rows with:
Date Values
6/1/2024, 1:00 AM 10
6/1/2024, 2:00 AM null
6/1/2024, 4:00 AM 20
6/1/2024, 6:00 AM 30
After adding the missing time
rows, I need to see like that:
Date Values
6/1/2024, 1:00 AM. 106/1/2024, 2:00 AM. null
6/1/2024, 3:00 AM. null
6/1/2024, 4:00 AM. 20
6/1/2024, 5:00 AM. 20
6/1/2024, 6:00 AM. 30
basically, The values from the missing rows I add to be copied from the previous row I had in my original table, no matter if it s null or it has value.
is there a way of doing this?
Thank you again for all the help from you:)