Как я могу использовать формулу массива с SUMIF с несколькими критериями - PullRequest
1 голос
/ 12 февраля 2020

Я занимаюсь этим уже пару дней и могу использовать некоторую помощь по этому вопросу… Я пытаюсь суммировать значения DH и Миль из таблицы «Список загрузки» для каждого водителя в течение двух указанных дат, используя Формула массива.

У меня есть следующие SUMIFS() для каждой ячейки в столбце «D» листа «Готовые данные драйвера», и я получаю правильный результат. Но мне бы очень хотелось преобразовать ее в формулу массива.

Для удобства чтения я разделил формулу по аргументам.

=(SUMIFS('Load List'!M:M,
         'Load List'!G:G,A2,
         'Load List'!H:H,">="&$N$2,
         'Load List'!H:H,"<="&$O$2)
         +
  SUMIFS('Load List'!N:N,
         'Load List'!G:G,A2,
         'Load List'!H:H,">="&$N$2,
         'Load List'!H:H,"<="&$O$2))

Теперь вот как далеко Я пришел ...

=ArrayFormula({"Miles";sumifs('Load List'!M2:N,
                              'Load List'!G:G,A2,
                              'Load List'!H:H,">="&$N$1,
                              'Load List'!H:H,"<="&$O$1)})

Также пробовал этот, который добавляет мили, но не фильтрует их ...

={"Miles";ArrayFormula(sumif('Load List'!G2:G,A2:A,
                             'Load List'!M:M)+
                       sumif('Load List'!G2:G,A2:A,
                             'Load List'!N:N)+
                       sumif('Load List'!H2:H,N1,
                             'Load List'!N:N))}

Кажется, что SUMIF не поддерживается если не использовать regexmatch, что я также не мог заставить работать. Я также пытался использовать несколько SUMIF, чтобы получить тот же результат. Я читал, что Query - это путь к go, но я понятия не имею, как использовать запрос. Я бы предпочел придерживаться Array, если это возможно.

Вот ссылка на лист с данными. Массивы предназначены для C1: E1 (выделено синим цветом)

https://docs.google.com/spreadsheets/d/1KC0yQYL50UOnIkvCslIbDM3PZVccx97uN1PbMf6Z52o/edit?usp=sharing

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Это в B1 должно помочь с агрегацией по драйверу. Нечто подобное можно сделать для агрегирования по состоянию:

=ARRAYFORMULA({"Count","DH","Miles","Revenue","$/mile","Weekly Avg.";IF(LEN(A2:A),VLOOKUP(A2:A,QUERY('Load List'!A:S,"select G,COUNT(G),SUM(M),SUM(N),SUM(O),AVG(R),SUM(O)/"&(Q1-P1)/7&" where H >= date '"&TEXT(P1,"yyyy-mm-dd")&"' and H<= date '"&TEXT(Q1,"yyyy-mm-dd")&"' group by G"),{2,3,4,5,6,7},0),)})
0 голосов
/ 12 февраля 2020

Примечание:

Чтобы формулы массива работали, их необходимо применить к массивам соответствующего размера.


У вас действительно будет соответствующее количество ячеек в столбцах "DH "и" Мили "для каждого водителя, где даты находятся в пределах диапазона (принадлежат каждой строке, где выполняются условия в пределах вашего критерия критериев). Из этих ячеек вы хотели бы получить общую сумму, поэтому вам нужен ОДИН результат.

Так будет работать что-то вроде следующего:

=ArrayFormula(sum("Driver's-Condition-Matching_DH-Range"+"Driver's-Condition-Matching_Miles-Range"))

Проблема в том, что вам нужно найти указанные диапазоны ... Вы можете использовать функции поиска или запросы для Сделай так.

Но ИМХО ваш первый подход проще, ровнее, удобочитаемее, лучше в целом.

Я отправил это как ответ, потому что это был бы слишком длинный комментарий. Надеюсь, это поможет.

0 голосов
/ 12 февраля 2020

сумма в формуле массива будет выглядеть следующим образом:

={"Revenue"; ARRAYFORMULA(IFNA(VLOOKUP(A2:A, 
 QUERY(QUERY('Load List'!G:O, 
 "select G,O
  where H >= date '"&TEXT(O1, "yyyy-mm-dd")&"' 
    and H <= date '"&TEXT(P1, "yyyy-mm-dd")&"'", 0), 
 "select Col1,sum(Col2) 
  group by Col1 
  label sum(Col2)''", 0), 2, 0)))}

0

...