Если тогда выписка с использованием двух разных диапазонов дат - PullRequest
1 голос
/ 16 мая 2019

В Power BI я использую таблицу периодов, которая применяет шаги для получения текущей даты, устанавливает диапазоны, преобразует диапазоны в таблицу, а затем устанавливает вывод в Power Query. Все работает как положено, но фокус на шаге диапазонов.

Вот как:

    = {
                    {"Day", 
                    Date.AddDays(TodaysDate,-1), 
                    Date.AddDays(TodaysDate,-1),
            1},
                    {"Week to Date", 
                    Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)), 
                    Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , +6), 
            2},
                    {"Week", 
                    Date.AddWeeks( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1), 
                    Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1), 
....

Вот пример вывода:

enter image description here

Что я хочу, однако, это то, что если сегодня равен понедельнику, то покажу только дату пятницы. Вот моя попытка:

= {
            {"Day", 
            if Date.DayofWeek(TodaysDate) = 1 
       then 
    [
            Date.AddDays(TodaysDate,-3), 
            Date.AddDays(TodaysDate,-3),
    ]
            else
    [
            Date.AddDays(TodaysDate,-1), 
            Date.AddDays(TodaysDate,-1),
    ] ....

Обратите внимание, что «День» - это «Вчера». Я пытаюсь сделать это так, чтобы люди могли видеть работу за предыдущий день, где предыдущий день для понедельника был бы пятницей.

Вот весь код:

    let
    TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
    Ranges = {
                {"Day", 
                Date.AddDays(TodaysDate,-1),                 
                Date.AddDays(TodaysDate,-1), 

        1},
                {"Week to Date", 
                Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)), 
                Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , +6), 
        2},
        {"Week", 
                Date.AddWeeks( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1), 
                Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1), 
        3},
                {"Month To Date", 
                Date.From(Date.StartOfMonth(TodaysDate)), 
                TodaysDate, 
                4},
                {"Month", 
                Date.AddMonths(Date.From(Date.StartOfMonth(TodaysDate)),-1), 
                Date.AddMonths(Date.From(Date.EndOfMonth(TodaysDate)),-1), 
                5},
                {"Rolling 13Wks", 
                Date.AddWeeks(TodaysDate,-13) + #duration(1,0,0,0), 
                TodaysDate, 
                6},
                {"Year To Date", 
                Date.From(Date.StartOfYear(TodaysDate)), 
                TodaysDate, 
                7}

             },
    GetTables = List.Transform(Ranges, 
            each CreatePeriodTable(_{0}, _{1}, _{2}, _{3})),
    Output = Table.Combine(GetTables),
    #"Filtered Rows" = Table.SelectRows(Output, each true)
in
    #"Filtered Rows"

1 Ответ

1 голос
/ 16 мая 2019

Я думаю, что самым простым было бы создать переменную для предыдущего дня:

let
    TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
    PrevWorkDate = if Date.DayOfWeek(TodaysDate) = 1
                   then Date.AddDays(TodaysDate,-3)
                   else Date.AddDays(TodaysDate,-1),

    Ranges = {
                {"Day", 
                PrevWorkDate,                 
                PrevWorkDate, 

        1},

    [...etc...]

В противном случае вы могли бы сделать что-то вроде этого:

let
    TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
    Ranges = {
        if Date.DayOfWeek(TodaysDate) = 1
        then
            {"Day", 
                Date.AddDays(TodaysDate,-3), 
                Date.AddDays(TodaysDate,-3),
             1}
        else
            {"Day", 
                Date.AddDays(TodaysDate,-1), 
                Date.AddDays(TodaysDate,-1),
             1},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...