填写缺少的日期Power BI

时间:2019-01-10 15:36:34

标签: powerbi dax powerquery

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

OutboundOrders Table

我想为每个缺失的日期添加5条记录(每个 BRAND 一个),其中 BRAND a / b / c / d / e ORDERS UNITS 均为 0 ,而所有其他记录保持不变。我创建了一个日历表,并创建了两个从Date到SHIP_DATE的关系,如下所示:

Relationship

在Query Editor中,我尝试将这两个表与Right Join合并以包括日历中的所有记录,希望它会在1月1日添加,但根本没有改变。

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

1 个答案:

答案 0 :(得分: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]))