Формула, которая переводит дату в финансовый год, финансовый период и финансовую неделю - PullRequest
0 голосов
/ 10 февраля 2020

Работа над формулой, которая возьмет дату и переведет ее в формат FYxxPxxWx.

Например. Введите дату 22/22/20, и формула даст вам FY20P06W4, который является правильным.

Однако, если вы введете 02/02/20, формула даст вам FY20P05W2. Правильный вывод будет FY20P05W1. Эта проблема также поднимает голову с датой 29.09.19. Это дает вам FY20P12W5. Правильный вывод будет FY20P1W1.

Что-то еще странное происходит, когда вы вводите дату 04/5/20, когда вы получаете FY21P07W2, когда она должна быть FY20P07W2.

Формула: =CONCATENATE("FY",RIGHT(YEAR(DATE(YEAR(D5),MONTH(D5)+(10-1),1)),2),"P",TEXT(CHOOSE(MONTH(D5),4,5,6,7,8,9,10,11,12,1,2,3),"0#"),"W",WEEKNUM(D5,1)-WEEKNUM(DATE(YEAR(D5),MONTH(D5),1),1)+1)

Я думаю, эта проблема вызвана странными неделями, когда заканчивается месяц, а другой начинает отбрасывать формулу.

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

=(DATE(YEAR(TODAY())-1,10,1)-(WEEKDAY(DATE(YEAR(TODAY())-1,10,1),1)))+1

Это выводит 29.09.19 как дату начала финансового года как это та же неделя, что и 01.10.19, которая является первым месяцем финансового года. ЕСЛИ это имеет смысл.

Отдельные формулы для финансового года и получают только последние две цифры года RIGHT(YEAR(DATE(YEAR(D5),MONTH(D5)+(10-1),1)),2)

для периода (дает мне две ди git период TEXT(CHOOSE(MONTH(D5),4,5,6,7,8,9,10,11,12,1,2,3),"0#")

на неделю WEEKNUM(D5,1)-WEEKNUM(DATE(YEAR(D5),MONTH(D5),1),1)+1)

1 Ответ

1 голос
/ 11 февраля 2020

Я думаю, у меня есть решение для вас. Обсуждение последует, но вот полная формула:

=CONCAT("FY",RIGHT(YEAR(D5+91+WEEKDAY(DATE(YEAR(D5),10,1))),2),"P",TEXT(IF(MONTH(D5+(7-WEEKDAY(D5)))<>MONTH(D5),IF(MONTH(D5)=9,1,CHOOSE(MONTH(D5),5,6,7,8,9,10,11,12,1,2,3,4)),CHOOSE(MONTH(D5),4,5,6,7,8,9,10,11,12,1,2,3)),"0#"),"W",ROUNDUP(((D5-IF(MONTH(D5+(7-WEEKDAY(D5)))<>MONTH(D5),DATE(YEAR(D5),MONTH(D5)+1,1)-WEEKDAY(DATE(YEAR(D5),MONTH(D5)+1,1))+1,DATE(YEAR(D5),MONTH(D5),1)-WEEKDAY(DATE(YEAR(D5),MONTH(D5),1))+1))/7)+0.01,0))

Одна проблема состоит в том, что это все равно вычисляет 2/2/2020 так, как вы сказали, было неправильно. Однако, когда я проверяю это по календарю, кажется, что FY20P05W02 должен быть верным. Если неделя, включающая первое число месяца, начинает новый период оплаты, это будет означать, что 1 февраля 2020 г., приходящееся на субботу, будет последним днем ​​1-й финансовой недели. Это будет 2 февраля 2020 г. день фискальной недели 2.

Для расчета фискального года я использовал RIGHT(YEAR(D5+91+WEEKDAY(DATE(YEAR(D5),10,1))),2). Поскольку вы можете рассчитывать на 91 день с начала октября до конца декабря, это помогает при таком расчете. В вашей формуле у вас было MONTH(D5)+(10-1), что равнялось бы вам sh через 9 месяцев после месяца в D5. Это объясняет, почему ваш результат за 4/5/2020 был на год меньше.

Финансовый период был немного сложнее, потребовалось несколько вложенных операторов IF. Сначала я использовал IF(MONTH(D5+(7-WEEKDAY(D5)))<>MONTH(D5) для учета дней в конце месяца, которые приходятся на следующий финансовый период, а затем IF(MONTH(D5)=9 для учета нескольких дней в конце сентября, которые могут приходиться на следующий финансовый год. Дни в конце сентября по умолчанию будут равны 1, дни в конце месяца, включенные в следующий финансовый период, используют первую функцию CHOOSE (им нужен номер следующего месяца), а все остальное получает CHOOSE функция, как вы ее написали.

Финансовая неделя заняла немного больше, но в итоге я оценил начало текущего финансового месяца и вычел его из даты в D5, затем разделил на 7 и добавил 0,01, чтобы четные числа округлялись правильно.

Я проверял это в течение нескольких лет, и казалось, что он работает правильно, но дайте мне знать, если у вас есть вопросы или проблемы.

При использовании WEEKNUM необходимо учитывать, что в начале года у вас будет неделя, которая считается дважды, если вы не используете опцию 21 или ISOWEEKNUM. Они дают тот же результат, что и каждый другой, и гарантируют, что для каждого дня независимо от года назначается только один номер недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...