Использование запроса листов Google для определения количества дней отсутствия идентификатора в течение каждого месяца. - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть лист Google, который отслеживает, когда идентификатор будет go отключен и когда он вернется. Каждая строка на этом листе имеет идентификатор объекта, дату, когда он отключается, дату, когда он возвращается, и логическое значение для того, считать его или нет.

На Листе 2 я хочу отслеживать, сколько дней объект был отключен каждый месяц в прошлом году.

Пример данных

Id      StartDate   EndDate    Bool
999999  1/5/2020    1/10/2020  TRUE
999999  12/25/2020  1/4/2020   TRUE
888888  10/1/2019   1/20/2020  TRUE
888888  1/21/2020   1/30/2020  TRUE

Sheet2

Id      2/1/2020  1/1/2020  12/1/2019  11/1/2019  10/1/2019  9/1/2019
999999     15        15        15         15         15         15
888888     111       111       111        111        111        111

Желаемый вывод

Id      2/1/2020  1/1/2020  12/1/2019  11/1/2019  10/1/2019  9/1/2019
999999     0         9          7          0          0         0
888888     0         29         31         30         31        0

Пример Google Sheet

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

=SUM(QUERY(Sheet1!$A:$D,CONCATENATE("select datediff(C,B) where D=TRUE and A=",$A2)))

Однако он не проверяет, относятся ли дни к месяцу, я подумывал о том, чтобы иметь ли утверждения в датированной форме. функция, что-то, что будет работать следующим образом:

select datediff(ifs(StartDate<1stOfTheMonth,1stOfTheMonth,StartDate>1stOfTheMonth and StartDate<EndOfMonth,StartDate,StartDate>EndOfMonth,EndOfMonth),ifs(EndDate>EndOfMonth,EndOfMonth,EndDate<EndOfMonth and EndDate>StartOfMonth,EndDate,EndDate<1stOfTheMonth,1stOfTheMonth)) where ...

Если дата начала предшествует началу месяца, она отсчитывает дни с начала месяца, если дата начала в течение месяца, она подсчитывает дни от даты начала, если дата начала следует за месяцем, возвращается 0 дней, потому что отсчитывается с конца месяца до конца месяца.

Если дата окончания - после окончания месяц, он считается до конца месяца, если дата окончания находится в течение месяца, он считается до даты окончания, если дата окончания предшествует месяцу, он возвращает 0 дней, потому что он считает от начала месяца до начало месяца.

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

1 Ответ

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

Создайте вкладку fre sh на листе образца. Поместите эту формулу в A1, затем отформатируйте верхнюю строку как Формат> Число> Дополнительные форматы> Формат пользовательских чисел:

ммм гггг

=ARRAYFORMULA(TRANSPOSE(QUERY(VLOOKUP(SEQUENCE(COUNTA(Sheet1!B2:B)*(MAX(Sheet1!C2:C-Sheet1!B2:B)+1),1,0)/(MAX(Sheet1!C2:C-Sheet1!B2:B)+1)+2,{ROW(Sheet1!B2:B),Sheet1!A2:A,IF((Sheet1!B2:B+SEQUENCE(1,MAX(Sheet1!C2:C-Sheet1!B2:B)+1,0)<=Sheet1!C2:C)*Sheet1!D2:D,IFERROR(EOMONTH(Sheet1!B2:B+SEQUENCE(1,MAX(Sheet1!C2:C-Sheet1!B2:B)+1,0),-1)+1),)},MOD(SEQUENCE(COUNTA(Sheet1!B2:B)*(MAX(Sheet1!C2:C-Sheet1!B2:B)+1),1,0),MAX(Sheet1!C2:C-Sheet1!B2:B)+1)*{0,1}+{2,3}),"select Col2,Count(Col2) where Col2 is not null group by Col2 pivot Col1 order by Col2 desc label Col2'ID'")))
...