Подведите итог группировки по году и месяцу - PullRequest
43 голосов
/ 06 сентября 2011

У меня есть лист Движения с двумя полями:

mydate      | amount
2009-01-01  | 10.00
2009-01-02  | 13.00
2009-02-01  | 11.00
2009-02-05  | 12.00
2009-02-08  | 52.00

Я хочу иметь в другом листе MonthSum * , который отображает суммы данных в столбце сумму , сгруппированные по году + месяцу столбца дата :

mydate      | amount
2009-01     | 23.00
2009-02     | 75.00

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

SELECT DATE_FORMAT('%Y-%m', mydate), SUM(amount) 
FROM mytable GROUP BY DATE_FORMAT('%Y-%m', mydate)

Мне нужно решение для работы на Google Spreadsheets .

Я думаю, что возможными решениями было бы использование SUMIF или сводных таблиц или функции Google Spreadsheets QUERY .

Ответы [ 6 ]

87 голосов
/ 31 января 2013

Это то, для чего нужны сводные таблицы .

Я создал пример , используя ваши данные.

Сначала добавьте столбец вотформатируйте дату в виде ежемесячной строки, например, «2009-01» с формулой:

TEXT(A2, "YYYY-MM")

enter image description here


Затем выделите данные,и выберите «данные»> «отчет сводной таблицы ...»

enter image description here


Для строк выберите «месяц»

enter image description here


Для значений выберите «сумму»

enter image description here


TADA!Вот и все!

enter image description here

Для быстрого обзора сводных таблиц см. это сообщение в блоге Google .

30 голосов
/ 06 сентября 2011

Вы можете сделать это с формулой массива, я поместил формулу в A2 и в A1, я поставил номер месяца:

=ARRAYFORMULA(SUMPRODUCT(1*(MONTH(Sheet1!$A$2:$A$6)=A1)*Sheet1!$B$2:$B$6))

См. Документ в действии вGoogle Spreadsheet

[EDIT] Если вы хотите указать год и месяц:

=ARRAYFORMULA(SUMPRODUCT(1*(YEAR(Sheet1!$A$2:$A$8)=A2)*(MONTH(Sheet1!$A$2:$A$8)=B2)*Sheet1!$B$2:$B$8))
11 голосов
/ 08 июля 2012

в дополнение к вкладу от JMax, позвольте мне представить следующую формулу, используя функцию QUERY ...

=query(index('Sheet3'!A:B); "select year(Col1)+(month(Col1)+1)/100,sum(Col2) where Col1 is not null group by year(Col1)+(month(Col1)+1)/100 label year(Col1)+(month(Col1)+1)/100 'mydate',sum(Col2) 'amount' ")

Примечания: Я предположил, что исходные данные находятся в Sheet3 и мой результат представляет комбинации года и месяца как гггг.мм вместо гггг-мм Я создал иллюстрацию:

yogi

1 голос
/ 01 мая 2018

Ответ Мэтта Бернса и Cœur довольно точный, и я хотел бы добавить комментарий (я не добавил его в раздел комментариев, поскольку он довольно длинный)

Возможно, вы захотите использовать эту формулувместо этого: DATE(YEAR(A2);MONTH(A2);1) для группировки по году и месяцу.

Таким образом, вы сохраните значения как даты и, следовательно, сможете применить любой тип форматирования даты илисортировка в сводной таблице.


Пояснение: вы можете пропустить:

Вместо TEXT(A2, "YYYY-MM") преобразует значение в тексте и, следовательно, удаляет свободу дальнейших манипуляций с датой.

DATE(YEAR(A2);MONTH(A2);1) удаляет день и время из даты, например, 2018/05/03 и 2018/05/06 оба становятся 2018/05/01 которая по-прежнему является датой, которую затем можно сгруппировать.

Применив формат "YYYY-MM" непосредственно к сводной таблице, вы получите тот же результат.

0 голосов
/ 05 января 2019

Вам нужно использовать подход массива.Как комбинировать массивы вы можете узнать здесь https://stackoverflow.com/a/42488671/1393023

Foremost QUERY

Это просто и прозрачно

=QUERY(
  ARRAYFORMULA({TEXT(Movements!A:A,"YYYY-MM"),Movements!B:B}),
  "select Col1,sum(Col2) group by Col1"
)

Во-вторых ARRAYFORMULA(SUMIF)

Просто объедините функции в цепочку

=SORT(UNIQUE(FILTER(
  {
    TEXT(Movements!A2:A,"YYYY-MM"),
    SUMIF(EOMONTH(Movements!A2:A,1),EOMONTH(Movements!A2:A,1),Movements!B2:B)
  },
  LEN(Movements!B2:B)
)),1,1)

Мой пример

0 голосов
/ 24 сентября 2016

Я работал с похожей проблемой. Я нашел, что эта формула работает хорошо.

=SUMIF(ARRAYFORMULA(MONTH('Sheet1'!A:A)), A2, 'Sheet1'!B:B)

В клетке A2 Я поставил месяц, который хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...