Power BI, выдача для суммирования последнего рабочего дня и последних двух рабочих дней

#powerbi #dax #powerbi-desktop #measure

#powerbi #dax #powerbi-рабочий стол #измерение

Вопрос:

У меня вопрос о том, как рассчитать сумму последнего предыдущего рабочего дня.

Вот мой набор данных:

 Date      Name  Amount
16/09/20  A     10
17/09/20  A     10
17/09/20  B     30
18/09/20  A     50
21/09/20  A     20
21/09/20  B     60
22/09/20  B     50
  

На моей панели инструментов у меня есть фильтр для выбора даты отображения, и я вижу сумму за сегодняшний день; последний предыдущий рабочий день и предпоследний предыдущий рабочий день.
Поэтому, когда я ставлю себя на дату 17/09/2020, я должен увидеть это:

  • Сумма для D (17/09/2020) -> 40
  • Сумма для D-1 (16/09/2020) -> 10
  • Сумма для D-2 (15/09/2020) -> пусто

Когда я ставлю себя на дату 18/09/2020, я должен увидеть это:

  • Сумма для D (18/09/2020) -> 50
  • Сумма для D-1 (17/09/2020) -> 40
  • Сумма для D-2 (16/09/2020) -> 10

Когда я ставлю себя на дату 21/09/2020, я должен увидеть это:

  • Сумма для D (21/09/2020) -> 80
  • Сумма для D-1 (18/09/2020) -> 50
  • Сумма для D-2 (17/09/2020) -> 40

Я не нахожу способ суммирования за предыдущий день с помощью calculate или sum, и previousday в моем случае не помогает.

Заранее спасибо за помощь,

Комментарии:

1. Вам нужны эти 3 значения в 3 столбцах для каждой строки? или отдельное значение для отображения в КАРТОЧКЕ?

2. Я хотел бы получить три отдельных значения: D, D-1 и D-2. Идея заключалась бы в том, чтобы в конце иметь возможность увидеть результат D-(D-1), чтобы восстановить разрыв между двумя значениями.

3. что делать, если нет предыдущей доступной даты?

4. Если это нравится для D-2 даты 17/09/20, он может отображать пустой / пустой, это не важно

5. таким образом, оба d-1 и d-2 для даты 21/09/20 будут пустыми, верно?

Ответ №1:

Я настоятельно рекомендую добавить измерение даты в вашу модель. Это упростит аналитику на основе данных.

Вот моя первая попытка. Я предполагал, что праздничными днями являются только субботы и воскресенья. Если вам нужно учитывать другие праздники, вам понадобится таблица измерения дат. Также обратите внимание, что я использовал ALL(Data) внутри CALCULATE . Это удалит все фильтры, примененные к Data таблице.

 Output = 
VAR _selectedDate =
    MAX ( 'Data'[Date] )
VAR _selectedDateDay =
    WEEKDAY ( _selectedDate )
VAR _selectedDateminus2 =
    SWITCH (
        TRUE,
        _selectedDateDay = 2, _selectedDate - 4,
        _selectedDateDay = 3, _selectedDate - 5,
        _selectedDate - 2
    )
RETURN
    CALCULATE (
        SUM ( 'Data'[Amount] ),
        FILTER (
            ALL ( 'Data' ),
            'Data'[Date] <= _selectedDate
                amp;amp; 'Data'[Date] >= _selectedDateminus2
        )
    )
  

введите описание изображения здесь

Комментарии:

1. Привет, большое спасибо за эту идею, но я неправильно объясняю часть набора данных, я думаю. Это была выдержка, поскольку есть другое значение, которое я отредактировал в своем вопросе. Итак, я протестировал ваше решение, но min / max не работает.

2. Можете ли вы предоставить образец набора данных, для которого он не работает?

Ответ №2:

Создайте следующие 3 меры-

 D_0 = 
CALCULATE(
    SUM('your_table_name'[Amount]),
    FILTER(
        ALL('your_table_name'),
        your_table_name[Date] = SELECTEDVALUE(your_table_name[Date])
    )
)
  
 D_1 = 
CALCULATE(
    SUM('your_table_name'[Amount]),
    FILTER(
        ALL('your_table_name'),
        your_table_name[Date] = SELECTEDVALUE(your_table_name[Date]) - 1
    )
)
  
 D_2 = 
CALCULATE(
    SUM('your_table_name'[Amount]),
    FILTER(
        ALL('your_table_name'),
        your_table_name[Date] = SELECTEDVALUE(your_table_name[Date]) -2
    )
)
  

Вот результат, когда вы выбираете дату «18/09/20» из слайсера-

введите описание изображения здесь

Комментарии:

1. Привет, спасибо за ваше решение, но вы управляете предыдущим днем и последними 2 предыдущими днями, но не рабочим днем, который должен исключать субботу и воскресенье. Это работает для 18/09, но не для 21/09.

2. Это то, что я спросил. теперь, как вы определяете рабочий день? или мера, которая находит предыдущую доступную дату как D-1, подойдет для вас? Я имею в виду, что мера найдет предыдущую доступную дату независимо от пробелов.

3. Worday day — это все дни недели, кроме субботы и воскресенья. Я нашел решение, которое работает для меня, которое я опубликовал. Спасибо за вашу помощь

4. Голосование или принятие ответа — это реальное спасибо здесь 🙂 В любом случае приятно видеть, что вы получили решение. кстати, вы также можете принять свой собственный ответ, чтобы другие люди, посещающие здесь, могли понять, какой ответ является решением этой проблемы.

Ответ №3:

Я только что нашел решение, здесь я его публикую:

Для D:

 wd = SUM(data[Amount])
  

Для D-1:

 lwd = 
    var ad = DATEADD(data[Date];0;DAY)
    var lwd = IF( 
        WEEKDAY(ad) = 1; //sunday
        ad - 2;
        IF(
            WEEKDAY(ad) = 2; //monday
            ad - 3;
            ad - 1 //others
        )
    )
    var sumLWD = CALCULATE(SUM(data[Amount]);data[Date]=lwd)
    return sumLWD
  

Для D-2:

 l2wd = 
    var ad = DATEADD(data[Date];0;DAY)
    var lwd2 = IF( 
        WEEKDAY(ad) = 2; //monday
        ad - 4;
        IF(
            WEEKDAY(ad) = 3; //tuesday
            ad - 4;
            ad - 2 //others
        )
    )
    var sumLWD2 = CALCULATE(SUM(data[Amount]);data[Date]=lwd2)
    return sumLWD2
  

Спасибо всем за вашу помощь и время.
С уважением,