У меня есть все эти данные на тестовых прогонах:
controller start end start ts end ts
1 1:13 1:15 1:00 1:30
1 2:08 2:25 2:00 2:30
4 4:02 4:16 4:00 4:30
4 4:17 5:35 4:00 6:00
2 4:03 5:39 4:00 6:00
Несмотря на то, что каждый тест начинается и заканчивается в определенное время, планировщик тестов резервирует весь получасовой временной интервал, поэтому я выберу время с помощью FLOOR и CEILING.
Каждый тест использует определенный контроллер, и во время прогона никакой другой тест не может использовать этот контроллер.
Из этих данных я хочу рассчитать максимальное количество одновременных контроллеров, используемых за определенный период времени. Для этого я подумал, что смогу подсчитать количество используемых контроллеров при запуске данного теста, так как это единственный раз, когда количество используемых контроллеров увеличится.
Итак, моя формула для этого была: (используя действительно хороший синтаксис табличных данных 2010 года)
=COUNTIFS([start timeslot],"<="&[@[start timeslot]],[end timeslot],">"&[@[start timeslot]])
Однако, поскольку округление временного интервала приводит к перекрытию между тестами, которые на самом деле не перекрываются, индикаторы будут считать тесты на одном контроллере столько раз, сколько они происходят.
Мне нужен способ заставить COUNTIFS подсчитывать повторяющиеся значения только один раз, когда они встречаются в соответствующих диапазонах.
Вот файл Excel с некоторыми примерами данных и моими формулами:
Больше информации:
Я фактически построил формулу массива, которая вычисляет числа, которые я хочу:
{=SUM(--([start timeslot]<=[@[start timeslot]])*--([end timeslot]>[@[start timeslot]])*IFERROR(1/COUNTIFS([controller],[controller],[start timeslot],"<="&[@[start timeslot]],[end timeslot],">"&[@[start timeslot]]),0))}
COUNTIF внутри этой формулы массива генерирует взвешенный массив того, сколько раз конкретный контроллер встречается в наборе тестов, которые выполняются при запуске текущего теста. Таким образом, функция суммы будет считать два теста, каждый из которых использует контроллер, как 1/2, в результате чего этот контроллер будет считаться только один раз.
Тем не менее, мой реальный набор данных содержит более 3000 строк, и моя формула массива ставит плохой Excel на колени. (Даже моя искаженная функция COUNTIFS занимает ~ 30 секунд на моем старом двухъядерном ноутбуке, поэтому формула массива тикает на 1% каждую минуту или около того; _;)