web-dev-qa-db-fra.com

Comment regrouper des données par mois dans Google Sheets

J'ai une feuille de Google qui contient diverses mesures pour chaque jour. Chaque jour a sa propre ligne:

day        | cost | impressions | clicks | conversions
2014-02-01 | $45  | 3,540       | 80     | 5
2014-02-02 | $49  | 3,700       | 88     | 7
2014-02-03 | $42  | 3,440       | 79     | 7
2014-02-04 | $51  | 3,940       | 91     | 10

Je veux faire pivoter le tableau et résumer la cost, impressions, clicks et conversion colonnes par mois (pas par jour) comme suit:

Month        | Sum of cost | Sum of impressions | Sum of clicks | Sum of conversions
February     | $187        | 14620              | 338           | 29

Dans Excel, je viens d'utiliser la fonction Group by, mais je constate qu'elle n'est pas disponible dans Google Sheets.

29
Bogdan

Utiliser le Data->Pivot table report... offre exactement ce que vous demandez. Il est possible que vous deviez utiliser le " Nouvelles feuilles de Google ".
J'utilise ce paramètre par défaut et il était facile de réaliser ce que vous souhaitiez, comme dans Excel.

Here Dans ma réponse, j'explique comment activer les nouvelles feuilles de calcul.


Il semble que je n'ai pas complètement compris le problème.

Nous devons d’abord avoir le mois. Pour cela, ajoutez une nouvelle colonne pour extraire la date en utilisant =MONTH(DATE_COLUMN).

enter image description here

Ensuite, créez un rapport Pivot:

enter image description here

17
StampedeXV

Google Sheets prend désormais en charge cette fonctionnalité en tant que "Créer un groupe de dates pivot".

Une fois que vous avez ajouté votre colonne de date/heure en tant que ligne:

  1. Faites un clic droit sur l'une des valeurs du tableau croisé dynamique,
  2. Choisissez 'Créer un groupe de dates de pivot'
  3. Choisissez le groupe souhaité (par exemple, "Mois" ou "Année-mois")

Avant + Exemple visuel:

Pivot table before grouping

Après:

enter image description here

Plus d'informations

23
MotohawkSF

Sans colonne d'assistance:

=query(A:E,"select sum(B), sum(C), sum(D), sum (E) group by month(A) offset 1")  

en supposant que day est en A1.

Documentation cela décrit mieux le fonctionnement de ce qui précède que jamais.

5
pnuts

Donc, pour ceux qui ont posé la même question que moi, il n’apparaît pas encore de fonction de champ Groupe pour Pivot dans Google Sheet (comme dans Excel). Par conséquent, le moyen le plus simple consiste à ajouter une autre colonne transformant vos dates en groupes dont vous avez besoin, par exemple. semaines, mois, années ... Espérons que la fonctionnalité sera bientôt disponible dans Google.

4
F Samie

J'ai trouvé un moyen que j'aime mieux. J'ai simplement créé une colonne masquée en procédant comme suit:


  • Arrondissez chaque jour du mois au premier jour du mois.

= A2 - jour (A2) + 1 où A2 est la date standard

  • Définissez la mise en forme sur personnalisé et choisissez mois/année. Cela vous demandera de supprimer le réglage du jour. Ainsi, il affichera mois/année lorsque la valeur réelle sera le premier jour du mois, mois, année.
  • Le tableau croisé dynamique va maintenant regrouper tous les éléments similaires et afficher le formatage à partir de la colonne avec mois/année.

De cette façon, vous obtiendrez des valeurs uniques au fil des années. J'ai moi-même décidé de masquer la colonne en question car j'ai un document connecté à cette feuille qui extrait les deux premières lignes au fur et à mesure que je les ajoute.

Formula for date and formatting

Custom Date Format

Pivot Table Results

1
Nick Mean

Aucune des réponses précédentes n'a fonctionné pour moi, car j'utilise un formulaire comme entrée. Vous ne pouvez pas ajouter de formules sur la feuille de formulaire.

Voici mon travail.

En lisant ce qui précède, le tableau croisé dynamique a besoin d’une colonne avec mois pour pouvoir être activée. Vous pouvez utiliser un critère différent, comme semaine ou vendredi. Ou John, Doe, Foo ou un bar. Tout ce que vous voulez "grouper".

Dans mon cas: la date est en B, =month(B2) donne le mois. Il me fallait donc une colonne supplémentaire avec =month(B2).

Le formulaire ne permet pas les formules. Et sur une feuille avec un formulaire, vous ne pouvez pas ajouter une colonne avec des formules (exactement: vous pouvez, mais une nouvelle entrée de formulaire supprime la formule sur la ligne correspondante).

Deuxième feuilles

Une seconde feuille simple avec =page1!A1 etc et en ajoutant le mois de la colonne pose le même problème. Une nouvelle entrée sous la forme => ajoute une ligne.

Solution

Alors j'ai fait ce qui suit.

  • Ajout d'une feuille supplémentaire
  • =importrange("longkeynumber";"sheet form!A1:E1000") utilisé sur A1
  • (importrange est d'importer un document différent, mais bon… ça marche)
  • En F, utilisé =if(B3>0;(MONTH(B3));"")
  • Lors de l'ajout de données supplémentaires dans la feuille A, les formules de la feuille B avec la plage d'importation restent.
  • Vous pouvez maintenant ajouter un tableau croisé dynamique, avec (dans ce cas) F comme ligne ou colonne.
1
user165410

J'ai trouvé un moyen plus simple de convertir la cellule de date en texte dans une nouvelle colonne.

=Text(A1, "mmm-yy")

Vous pouvez ensuite pivoter et il va regrouper par mois.

1
Pedropagina

Si vous ajoutez déjà une nouvelle colonne, vous pouvez également simplement utiliser eomonth("reference cell",0). Cela prendra toujours le dernier jour du mois. Ou eomonth("reference cell",-1)+1 pour obtenir le début du mois.

La beauté de cette approche au lieu de la conversion en texte est que lorsque vous faites pivoter les données. Cela va automatiquement trier ascendant de gauche à droite.

1
Skho

Dans la réponse answer de user165410, il déclare:

  • En F, utilisé =if(B3>0;(MONTH(B3));"")

C'est une bonne solution, mais cela peut être encore plus simple:

  • dans F3, =arrayformula(if(b3:b>0;(month(b3:b));""))

Ce que cela fait est automatiquement mis le mois pour chaque cellule non vide de la plage B3: B.

L'insertion ou la suppression d'une ligne, ou le déplacement d'une ligne ne va PAS foirer les formules!

0
Stefan van Aalst