【问题标题】:Fill in Missing Dates Power BI填写缺失日期 Power BI
【发布时间】:2019-01-10 15:36:34
【问题描述】:

我在 Power BI 中有一个表缺少某些日期,如下面的快照所示,其中 1 月 1 日没有订单(还有其他缺少的日期)。

我想为每个缺失的日期添加 5 条记录(每个 BRAND 一条),其中 BRANDa/b/c/d/ eORDERSUNITS 都是 0,同时保持所有其他记录相同。我创建了一个日历表,并在两者之间创建了从 Date 到 SHIP_DATE 的关系,如下所示:

在查询编辑器中,我尝试使用 Right Join 合并这两个表以包含日历中的所有记录,希望它会在 1 月 1 日添加,但结果根本没有任何变化。

如果有人对如何解决此问题有任何想法,我将不胜感激。

【问题讨论】:

    标签: powerbi dax powerquery


    【解决方案1】:

    在查询编辑器中,您可以使用虚构值附加缺失日期的表格。

    如果缺少的日期很少并且您都知道:

    = Table.Combine({your_data,
    #table(type table [SHIP_DATE = date, BRAND = text, ORDERS = number, UNITS = number],
    {{#date(2019,1,1),"a",0,0},
    {#date(2019,1,3),"b",0,0},
    {#date(2019,1,4),"c",0,0},
    {#date(2019,1,5),"d",0,0},
    {#date(2019,1,6),"e",0,0}})})
    

    或者如果您希望自动捕捉丢失的日期:

    let
        Source = your_data,
        Types = Table.TransformColumnTypes(Source,{{"SHIP_DATE", type date}, {"BRAND", type text}, {"ORDERS", Int64.Type}, {"UNITS", Int64.Type}}),
        FactDates = Types[SHIP_DATE],
        AllDates = List.Generate(()=>List.Min(FactDates), each _ <= List.Max(FactDates), each Date.AddDays(_,1)),
        MissingDates = List.Difference(AllDates,FactDates),
        ToTable = Table.FromList(MissingDates, Splitter.SplitByNothing()),
        Index = Table.AddIndexColumn(ToTable, "i", 0, 1),
        Brand = Table.AddColumn(Index, "BRAND", each {"a".."z"}{[i]}),
        Removed = Table.RemoveColumns(Brand,{"i"}),
        Renamed = Table.RenameColumns(Removed,{{"Column1", "SHIP_DATE"}}),
        Types2 = Table.TransformColumnTypes(Renamed,{{"SHIP_DATE", type date}, {"BRAND", type text}}),
        Appended = Table.Combine({Types, Types2}),
        Replaced = Table.ReplaceValue(Appended,null,0,Replacer.ReplaceValue,{"ORDERS", "UNITS"}),
        Sorted = Table.Sort(Replaced,{{"SHIP_DATE", Order.Ascending}})
    in
        Sorted
    

    请记住,当缺失日期的数量小于或等于 26(英文字母表中的字母数)时,此代码将正常工作。如果您希望丢失更多日期,只需将步骤 Brand 中的代码替换为如下所示:

    Brand = Table.AddColumn(Index, "BRAND", each "_brand"&Text.From([i]))
    

    【讨论】:

    • 是否可以自动执行此操作,因此我不需要查找所有丢失的日期?数据跨越多年。
    • 我扩展了答案。
    • 您的答案与我要找的非常接近。总共有 6 个品牌,我需要每个品牌每个缺失日有一条记录(因此对于每个缺失日,6 条记录)。每年大约有 58 天失踪 - 每个星期日和节假日。
    • 答案扩展。
    猜你喜欢
    • 2018-06-24
    • 2018-10-05
    • 2019-06-26
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多