используя sum и countifs, чтобы получить процент «да» в нескольких столбцах по месяцам и командам - ​​есть ли более простой способ? - PullRequest
0 голосов
/ 19 февраля 2020

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

Форма собирает данные, относящиеся к проверке случаев - каждая команда (более 100 команд) должна проверять определенное количество случаев на основе количества сотрудников в своей команде и вводить результаты для каждого случая, которые они проверяли, в форме Google. Команда, которая настроила это, хочет, чтобы я суммировал данные по группам, месяцам и разделам формы (предварительные вопросы, регистрация случаев, результаты и т. Д. c). В интерактивной форме есть 8 разделов, от 1 до 13 вопросов, все с да / нет / нет / пустыми ответами.

(честно, я бы не подошел к тому, чтобы все это настроить, но это не в моих руках!)

Таким образом, они, по сути, ищут живую ежемесячную сводку с названиями команд внизу, названиями разделов вверху и% заполненных возрастов, которые будут соответствовать записям в качестве они приходят (где мы также можем использовать importrange и query для вставки соответствующих битов в другие сводные таблицы Google, как и когда это необходимо).

В настоящее время у меня есть следующее:

=iferror(sum(countifs('Form Responses'!$B:$B,$A3,'Form 
 Responses'!$F:$F,"Yes",'Form Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$G:$G,"Yes",'Form
 Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$H:$H,"Yes",'Form
 Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$I:$I,"Yes",'Form
 Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$J:$J,"Yes",'Form
 Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$K:$K,"Yes",'Form
 Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1)))/(countifs('Form
 Responses'!$B:$B,$A3,'Form Responses'!$E:$E,">="&$B$1,'Form
 Responses'!$E:$E,"<"&edate($B$1,1))*6),0)

Это работает, но похоже на решение проблемы грубой силы и невежества. Я пробовал countifs & array, я посмотрел сводку, но не могу получить группы разделов, у меня была игра с запросом, но я не могу понять, как попросить его подсчитать все Yeses в нескольких столбцах сразу.

Есть ли более изящное решение, или я должен смириться с тем, чтобы настроить сводки следующего финансового года, как это?

Редактировать:

screenshot of example form data

screenshot of example summary tab

Ответы [ 2 ]

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

На этом листе , который вы предоставили, вы заметите две новые вкладки. MK.Retab и MK.Summary.

В MK.Retab - это единая формула в A2, которая «перенастраивает» все данные вашего опроса в формат, который намного проще анализировать в будущем. Эта вкладка может быть «скрыта» в вашем реальном проекте. Он будет продолжать строить набор данных из 6 столбцов навсегда. Это был бы своего рода «внутренний» лист, используемый только для предоставления данных для любого последующего последующего анализа.

На MK.Summary - это отдельная формула в ячейке A1, которая запрашивает этот набор данных из MK.Retab и показывает процент Да по месяцам по разделам по командам в формате, аналогичном предложенному вами. Я запрограммировал его так, чтобы отображать самый последний месяц слева, сразу справа от названий команд, и выводить исторические данные sh справа. Несмотря на то, что люди часто привыкли видеть время go слева направо, я считаю, что противоположный метод хорош, потому что он не позволяет вам прокручивать вбок, чтобы увидеть самые последние данные. Это очень просто изменить, если вы хотите, избавившись от "des c", который вы найдете в предложении "order by" в строке запроса.

Я нашел этот вид двухшагового решения к таким проблемам, как ваша полезная, потому что, хотя итоговый перенос не совсем соответствует вашим ожиданиям, всегда проще создавать формулы и анализировать данные, как указано в листе MK.Retab.

Что касается формулы в MK.Retab он основан на методе, который я придумал некоторое время назад, который создает большой vlookup, где [ключ поиска] на самом деле представляет собой последовательность десятичных чисел, которая строится путем подсчета количества строк в ваших реальных данных установить и умножить на количество столбцов данных, которые необходимо повторить для каждой строки. Как-то раз я создал демо-версию go, которой я с удовольствием поделюсь с людьми, если вы хотите лучше понять, как она работает.

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

Я могу сказать, что некоторые из формулы являются более сложными, чем они должны быть, потому что вы просто использовали Q1 Q2 Q3 et c вместо реальных вопросов. если бы у вас был список вопросов, заданных где-то (скажем, на другой вкладке), и то, что вы хотели назвать / назвать их соответствующими «разделами», это значительно усложнило бы формулу. В нынешнем виде мне пришлось использовать появление слова «Комментарии» в строке 1, чтобы различить guish между тем, где закончился один раздел и начался другой. Однако положительным моментом для этого решения является то, что формула, которую я написал, бесконечно расширяется вправо. То есть, если вы добавите еще 100 столбцов вопросов и ответов к образцу, приведенному здесь, формула сможет справиться с этим и разбить его, до тех пор, пока между каждым словом «Комментарии» раздел.

Надеюсь, все это поможет.

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

Вы можете использовать логическое умножение обычного массива для достижения счетчика, поскольку истины преобразуются в 1 с, а ложные преобразуются в 0:

=TO_PERCENT(ARRAYFORMULA(
    SUM((f!F1:K="Yes")*(f!E1:E>=B1)*(f!E1:E<EDATE(B1,1))*(f!B:B=A3))/
    SUM(6*(f!E1:E>=B1)*(f!E1:E<EDATE(B1,1))*(f!B:B=A3))
    )
  )
  • Переименовано Form Responses в f
  • Числитель: СУММА
    • Фильтр вопросов (f! F: K = Да) и
    • Фильтр месяца (f! E: E находится в пределах месяца с B1) и
    • Фильтр команды (B: B = A3)
  • Знаменатель: в 6 раз больше суммы
    • Фильтр месяца (f! E: E в течение месяца с B1 ) и
    • Фильтр команды (B: B = A3)
...