Power BI: Расчет своевременности поставок оборудования с учетом праздников и выходных, Power BI: Расчет своевременности поставок оборудования с учетом праздников и выходных
Есть формула, которая считает своевременность поставки оборудования:
Своевременность поставки = SWITCH(TRUE(),ISBLANK('Sheet1'[Дата прихода на склад.1]),"ожидает доставку",'Sheet1'[Дата прихода на склад.1]<=('Sheet1'[Планируемая дата поставки]+3),"своевременно","несвоевременно").
Но проблема возникла с выходными и праздничными днями. По подсказкам (https://www.planetaexcel.ru/techniques/24/13289/) создала список праздничных и выходных дней с колонками год и дата (во вложении).
Если [Планируемая дата поставки]+3 попадает на нерабочий день из файла, то должна браться дата, соответствующая первому рабочему дню после нее.
Понимаю, что вместо [Планируемая дата поставки]+3 нужна некая переменная, в которой как раз и будет прописана логика. Но вот саму логику никак не могу прописать. Что бы я не делала, только ломаю то, что сейчас есть(((
Nataly_Zot, добрый день. А Вы упорно не хотите выкладывать подготовленные файлы-примеры (а сам календарь и вот эти вот [Дата прихода на склад.1] и остальные столбцы где?), что в прошлой теме, что сейчас . По хорошему, нужно делать правильно Календарь с нужными столбцами. Во вложении, как вариант.
Alex, я вас совсем не поняла. Файл есть, но как мне в расчете убрать нерабочие дни.
Если правильно понимаю, должно быть как-то так:
Своевременность поставки =
var XXX = формула, согласно которой если 'Sheet1'[Планируемая дата поставки]+3 попадает на какую-то дату из [Нерабочие], то в нее сохраняется ближайшая рабочая дата. Если 'Sheet1'[Планируемая дата поставки]+3 попадает на дату, которой нет в списке [Нерабочие], то сохраняется эта дата.
SWITCH(TRUE(),ISBLANK('Sheet1'[Дата прихода на склад.1]),"ожидает доставку",'Sheet1'[Дата прихода на склад.1]<= вместо имеющегося выражения пишем как раз переменную, в которую сохранена дата XXX ,"своевременно","несвоевременно").
Nataly_Zot, а Вы файл смотрели, который я скинул? Порядок действий: 1. создаем полноценный календарь - таблица Календарь (но если вы работаете с датами, полноценный Календарь в модели должен быть однозначно) 2. добавляем столбец IsWorking в таблицу Календарь на основании Ваших нерабочих дней - true() - это рабочий день, false() - нерабочий (см. формулу в столбце IsWorking ) 3. создаем вычисляемый столбец Столбец1 в Таблице1, формула:
Код
=
var _cur_plan_date = 'Таблица1'[Plan date] + 3
var _tab = FILTER('Календарь'; 'Календарь'[Date] >= _cur_plan_date && 'Календарь'[IsWorking] = TRUE())
var _next_working_day =MINX(_tab; 'Календарь'[Date])
var _result = SWITCH(TRUE();ISBLANK('Таблица1'[Fact date]);"ожидает доставку"; 'Таблица1'[Fact date] <= _next_working_day ; "своевременно"; "не своевременно")
return
_result
_cur_plan_date - плановая дата в текущей строке + 3 дня _tab - таблица Календарь, отфильтрована 'Календарь'[Date] >= _cur_plan_date && 'Календарь'[IsWorking] = TRUE(), т.е. получаем таблицу с датами от плановый даты и дальше с учетом рабочих дней _next_working_day - нужная дата, т.е. если _cur_plan_date - рабочий день, то это она MINX(_tab; 'Календарь'[Date]), если нет то будет ближайший рабочий к плановой дате _result - итоговая формула. Так понятнее?
Alex, Почему-то работа с календарями и датами всегда вызывает у меня массу проблем :-) ранее также испытывала проблемы с WorkFusion (платформа для написания Робота). Но жизнь заставляет, буду учиться)))
Спасибо за разъяснения, так намного понятнее. Буду разбираться с формулами и пробовать.
Ваш файл конечно смотрела, но тут или я слепая, или что-то не то приложено :-).
Вот что я вижу в нем:
Plan date
Fact date
Status
31.03.2025
31.03.2025
Своевременно
24.12.2024
09.01.2025
Несвоевременно
30.06.2025
Не доставлено
11.02.2025
09.02.2025
Своевременно
25.04.2025
28.04.2025
Своевременно
25.04.2025
29.04.2025
Несвоевременно
Эту полностью копировать не стала)) в приложенном файле весь список дат
Нерабочие дни
01.01.2025
02.01.2025
03.01.2025
04.01.2025
05.01.2025
06.01.2025
Приложите, пожалуйста, ваш файл, который, если я правильно понимаю, со столбцом IsWorking, еще раз.
Nataly_Zot, файл в сообщении 2. Таблица 1 - таблица расчета, Календарь - это календарь со всеми датами за нужное кол-во лет, Таблица 2 - это Ваш список нерабочих дат.
В файле из сообщения #2 вижу другое, там 2 листа, один с моими начальными входными данными, другой с нерабочими датами. Ничего похожего на скрины выше. Поэтому сразу вас и не поняла совсем.
Alex, Еще раз хочу поблагодарить вас за помощь! Со всем разобралась. Все работает, как надо. Полноценный календарь себе сделала на будущее) Надеюсь, больше про даты спрашивать не буду)) Оказалось, что у меня нет в Excel надстройки Power Pivot, решаю этот вопрос с админами. СПАСИБО!