Google Sheets ArrayFormula Countifs работает неправильно - PullRequest
0 голосов
/ 10 марта 2020

Снимок экрана

У меня есть показатели в формуле массива, которые не работают правильно для данных в одной строке, и я не могу понять, почему , Вот как выглядят данные:

A   H           I           J       K
1   03/09/2020  08:33 PM        
1   03/11/2020  08:16 PM        
3   03/12/2020  08:00 AM        
4   03/12/2020  09:00 AM        
5   03/12/2020  11:00 AM        

У меня есть формула:

={"Priority"; ARRAYFORMULA(if(isblank(J2:J),if(isblank(H2:H)=false,
countifs(J:J,"",H:H,"<="&H2:H)
-countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I),""),""))}

Эта вторая строка должна иметь значение 2 в столбце A, насколько я могу рассказать. Когда я изменяю время в столбце I на 8:17 вечера, оно работает правильно. Я что-то упустил?

Вот копия моей рабочей книги: https://docs.google.com/spreadsheets/d/10pv5KvQYloxmx_7wQxlySTQslCQBFTcWwAsvkLHop7Y/edit?usp=sharing

Ответы [ 2 ]

1 голос
/ 10 марта 2020

У вас есть отдельные столбцы для «Дата выполнения» и «Срок выполнения», и вы создаете рейтинг (используя countifs), корректируя дату и время. Вы обнаружили, что ранжирование приводит к неожиданным ошибкам, и не знаете, почему.

Ваша формула "={"Priority"; ARRAYFORMULA(if(isblank(J2:J),if(isblank(H2:H)=false, countifs(J:J,"",H:H,"<="&H2:H) -countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I),""),""))}


Ошибка возникает в результате корректировки на независимость от времени даты. Дата и время оба являются объектами даты. В функции электронной таблицы Google оба рассчитываются как десятичное значение относительно эпохи (30.12.1899 0:00:00), хотя форматирование может часто использоваться для маскировки this.

В вашей формуле вычисляется корректировка между количеством дат (столбец H) и количеством времен (столбец I). Однако это предполагает, что оба значения существуют в одной и той же последовательности - это не случай. Эти времена не связаны с их аналогами Date - они существуют изолированно, и поэтому на расчет влияет их относительное значение (а не абсолютное значение).


Решение проблемы двоякое :
- записать дату исполнения в виде даты / времени, а

  • использовать COUNIFS только на основе поля даты / времени (удалить Элемент e -countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I))

    ИЛИ

  • использовать функцию RANK (сортировка по убыванию).


В этой таблице показано влияние на десятичное значение времени в отдельности по сравнению с датой / временем).

Date time comparisons

0 голосов
/ 12 марта 2020

Логика c и логика , выраженная Тединозом , верны. Предлагаемые решения также работают.

Все еще. Можно следовать другому подходу .
Проблема в том, что при вашем втором COUNTIFS условии вы смешиваете даты и время, поэтому несовместимость дает ложные результаты.

Легко исправить, слегка подправив формулу .

Вам просто нужно заменить два упоминания в столбце I на H+I

={"Priority"; 
   ARRAYFORMULA(if(isblank(J2:J),
                    if(isblank(H2:H)=false,
                        countifs(J:J,"",H:H,"<="&H2:H)
                       -countifs(J:J,"",H:H,H2:H,H:H+I:I,">"&H2:H+I2:I) ,""),""))}

Таким образом, вы создаете виртуальную временную метку , учитывающую как данную дату, так и время даты (избегая использования дополнительного вспомогательного столбца вместе с удалением второй COUNTIFS или радикально изменение формулы с помощью функции RANK) .
В качестве дополнительного бонуса вы получаете сохранение всех столбцов без изменений, поскольку вам "нужны эти столбцы отдельно для функциональности в остальной части книги" .


Виртуальная отметка времени работает, потому что, например, используется. H194+I194 (где H194 - это дата 03/09/2020, а I194 - это время 8:33:00 PM) , Google Sheets достаточно умен, чтобы НЕ просто добавлять эти две ячейки в качестве числовых значений c но объединить их и создать метку времени 3/9/2020 20:33:00

...