Заполните недостающие даты Power BI - PullRequest
0 голосов
/ 10 января 2019

У меня есть таблица в Power BI, в которой отсутствуют некоторые даты, как показано на снимке ниже, где не было заказов на 1 января (есть и другие отсутствующие даты).

OutboundOrders Table

Я хотел бы добавить 5 записей для каждой пропущенной даты (по одной на каждую БРЕНД ), где БРЕНД равен a / b / c / d / e и ORDERS и UNITS оба 0 , при этом все остальные записи остаются неизменными. Я создал таблицу календаря и создал отношения между ними от даты до SHIP_DATE, как показано ниже:

Relationship

В редакторе запросов я попытался объединить эти две таблицы с правым соединением, чтобы включить все записи из календаря, надеясь, что они будут добавлены 1 января, но это не привело к изменениям вообще.

Если у кого-нибудь есть идеи, как решить эту проблему, я был бы очень признателен.

1 Ответ

0 голосов
/ 11 января 2019

В редакторе запросов вы можете добавить таблицу пропущенных дат с вымышленными значениями.

Если пропущенных дат мало и вы знаете их все:

= 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 = Table.AddColumn(Index, "BRAND", each "_brand"&Text.From([i]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...