Forum Discussion

LCrossling's avatar
LCrossling
Frequent Visitor
5 years ago
Solved

Infilling Missing data

Hi Power BI Community, I have a problem where a series of providers supplying data every day. However providers may miss a day. See table below (Provider 2 has missed 02/09/2020 and Provider 3 ha...
  • AlB's avatar
    5 years ago

    Hi LCrossling 

    This can also be done in DAX, and it would perhaps be simpler. Place the following M code in a blank query to see the steps of the transformation in Power Query.  It can be done in a more compact way but I have used simpler steps on purpose so that it is clearer.

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dc+7DcAgDADRVSLXSID5KbNEFMH775ActEBxcvFki+eREH24vQYN4uTixX94ySAWpbsdUxgZxPTAEowMYmkx3R7NMGL5wOa2AiNWFkvbbRVGrB7Y/EKDEWvS+wc=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Provider = _t, A = _t, B = _t, C = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Provider", Int64.Type}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Date"}, {{"Providers", each [Provider], type table [Date=nullable date, Provider=nullable number, A=nullable text, B=nullable text, C=nullable text]}}),
        #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Missing", each List.RemoveMatchingItems(List.Distinct(#"Changed Type"[Provider]),[Providers])),
        #"Expanded Missing" = Table.ExpandListColumn(#"Added Custom", "Missing"),
        #"Filtered Rows" = Table.SelectRows(#"Expanded Missing", each ([Missing] <> null)),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Providers"}),
        #"Added Custom1" = Table.AddColumn(#"Removed Columns", "Previous date", each List.Max(Table.SelectRows(#"Changed Type", (inner)=> [Missing]=inner[Provider] and inner[Date] <[Date])[Date])),
        #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Missing rows", each Table.SelectRows(#"Changed Type", (inner)=> inner[Date]=[Previous date] and inner[Provider] = [Missing] ) ),
        #"Removed Columns1" = Table.RemoveColumns(#"Added Custom2",{"Missing", "Previous date"}),
        #"Renamed Columns" = Table.RenameColumns(#"Removed Columns1",{{"Date", "Actual Date"}}),
        #"Expanded Missing rows" = Table.ExpandTableColumn(#"Renamed Columns", "Missing rows", {"Date", "Provider", "A", "B", "C"}, {"Date", "Provider", "A", "B", "C"}),
        missingRowsT = Table.TransformColumnTypes(#"Expanded Missing rows",{{"Date", type date}, {"Provider", Int64.Type}, {"A", type text}, {"B", type text}, {"C", type text}}),
        #"Removed Columns2" = Table.RemoveColumns(missingRowsT,{"Date"}),
        #"Renamed Columns1" = Table.RenameColumns(#"Removed Columns2",{{"Actual Date", "Date"}}),
        res= Table.Combine({#"Changed Type", #"Renamed Columns1"}),
        #"Sorted Rows" = Table.Sort(res,{{"Date", Order.Ascending}, {"Provider", Order.Ascending}})
    in
        #"Sorted Rows"

     

     

    Please mark the question solved when done and consider giving kudos if posts are helpful.

    Contact me privately for support with any larger-scale BI needs, tutoring, etc.

    Cheers