Månadsrapportering blir märkligt skör. En liten ändring i en fråga, ett nytt filter, en “snabbfix” i ett beräknat fält – och plötsligt stämmer inte siffrorna mot förra perioden.
Den här MySQL Sheets-automationen slår hårdast mot team inom marketing ops och rev ops, men även analytiker och småföretagare märker av det. Du slipper gissa vad som ändrades och får en strukturerad lista över vad som saknas, matchar eller skiljer sig.
Det här arbetsflödet jämför två MySQL-rapportperioder, märker upp skillnaderna och skickar sedan resultaten till Google Sheets så att teamet kan agera snabbt (utan att behöva dubbelkolla databasen hela dagen).
Så fungerar automationen
Se hur detta löser problemet:
n8n Workflow Template: MySQL + Google Sheets: upptäck rapportändringar snabbt
flowchart LR
subgraph sg0["When clicking "Execute Workflow" Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking 'Execute Workf..", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/compare.svg' width='40' height='40' /></div><br/>Compare Datasets"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/mysql.dark.svg' width='40' height='40' /></div><br/>Orders from 2003 and 2004"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/mysql.dark.svg' width='40' height='40' /></div><br/>Orders from 2004 and 2005"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Change ordercount", pos: "b", h: 48 }
n4 --> n1
n2 --> n1
n3 --> n4
n0 --> n2
n0 --> n3
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2,n3 database
classDef customIcon fill:none,stroke:none
class n1,n2,n3 customIcon
Utmaningen: rapportperioder glider (och ingen märker det)
Att jämföra rapportperioder låter enkelt tills du faktiskt gör det. Du tar en SQL-summering för förra året, en annan för i år, klistrar in resultaten i ett kalkylark och försöker se vad som ändrats. Sedan frågar någon: “Varför ökade antal ordrar men intäkterna gjorde det inte?” och du slutar med att köra om frågor, dubbelkolla joins och diskutera vilken version av rapporten som är “korrekt”. Den verkliga kostnaden är inte bara tid. Det är den ständiga osäkerheten som gör varje beslut långsammare.
Det växer snabbt. Här är var det fallerar i verkliga team.
- Du jämför manuellt två exporter rad för rad, och det är lätt att missa en subtil förskjutning i ett fält.
- Små ändringar i beräkningar (som ett justerat orderantal) skapar förvirrande avvikelser som ser ut som “dataproblem”.
- Olika tidsfönster kan dölja saknade rader, så du upptäcker problem först efter att någon klagat.
- Även när du hittar ändringen tar kommunikationen ytterligare en runda med skärmdumpar och förklaringar.
Lösningen: jämför två MySQL-rapporter och publicera skillnaderna
Det här n8n-arbetsflödet kör två MySQL-frågor som ger samma typ av summeringsrapport, men för olika tidsperioder. Den ena rapporten täcker en tidigare period (i exemplet 2003–2004) och den andra täcker den senare perioden (2004–2005). Innan de jämförs gör arbetsflödet en liten transformation av orderantalet i den andra datamängden, vilket simulerar den typen av “hjälpsam justering” som brukar skapa förvirring senare. Sedan klassificerar steget Compare Datasets varje post i fyra tydliga grupper: bara i period A, bara i period B, identisk i båda eller finns i båda men skiljer sig. Till sist kan resultaten skickas till ett Google Sheet så att teamet ser svaret på ett ställe.
Arbetsflödet startar med en manuell trigger (lätt att byta till Cron när du vill schemalägga). Det hämtar de två rapportdatamängderna från MySQL, normaliserar orderantalet för den senare perioden och kör en datamängdsjämförelse som ger utdata för “endast A”, “endast B”, “samma” och “olika”. Därifrån blir publicering till Google Sheets ett naturligt nästa steg för delning.
Vad som ändras: före vs. efter
| Det här eliminerar | Effekt du kommer att märka |
|---|---|
|
|
Praktisk effekt i verkligheten
Säg att du publicerar två summeringsrapporter varje vecka och gör en manuell jämförelse innan du skickar ut dem. En typisk rutin är cirka 10 minuter för att exportera varje period, ungefär 20 minuter för att få allt att linjera i Sheets och ytterligare 20 minuter för att förklara avvikelserna. Runt 50 minuter per körning. Med det här arbetsflödet klickar du kör (eller schemalägger), väntar en stund på båda MySQL-frågorna och sedan är jämförelseutdata redo att skickas till Google Sheets. De flesta team får ner den veckovisa kontrollen till cirka 10 minuters övervakning.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- MySQL för att köra båda periodfrågorna.
- Google Sheets för att dela jämförelseutdata.
- MySQL-inloggningsuppgifter (få dem från din databasadmin eller hostpanel).
Svårighetsnivå: Nybörjare. Du klistrar in SQL, kopplar konton och mappar några kolumner.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
En körning triggas. I mallen är det en manuell start, vilket är perfekt för test. Många team byter detta till ett Cron-schema så att jämförelsen körs varje måndag morgon.
Två MySQL-rapporter hämtas. En fråga hämtar rapporten för den tidigare perioden och den andra hämtar rapporten för den senare perioden. Nyckeln är att båda resultaten har samma struktur så att jämförelsen blir meningsfull.
Den senare datamängden normaliseras. Arbetsflödet använder ett Set-steg för att manipulera orderantalet i den senare rapporten. Det är en liten förändring, men den speglar verkligheten – där en liten justering i en beräkning kan skapa en stor diskussion om rapporteringen.
Datamängder jämförs och grupperas. Compare Datasets ger fyra kategoriserade utdata: poster endast i A, endast i B, matchar i båda och skiljer sig mellan perioder. Det är de kategorierna som gör slutresultatet lätt att skumma.
Du kan enkelt ändra SQL-tidsfönstren för att jämföra månader, kvartal eller kampanjperioder utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Det här arbetsflödet startas manuellt och kör två SQL-frågor parallellt.
- Lägg till noden Manual Execution Start som er trigger.
- Koppla Manual Execution Start till både Retrieve 2003-2004 Orders och Retrieve 2004-2005 Orders så att de körs parallellt.
Manual Execution Start skickar utdata parallellt till både Retrieve 2003-2004 Orders och Retrieve 2004-2005 Orders.
Steg 2: Anslut MySQL och hämta historiska ordrar
Konfigurera båda SQL-frågorna så att de hämtar betalningsdata för de två årsspannen.
- Öppna Retrieve 2003-2004 Orders och ställ in Operation på
executeQuery. - Ställ in Query på
SELECT customerNumber, SUM(amount) as Total, COUNT(*) as ordercount, YEAR(paymentDate) as year FROM payments WHERE YEAR(paymentDate) = '2003' OR YEAR(paymentDate) = '2004' GROUP BY customerNumber, year ;. - Inloggningsuppgifter krävs: Anslut era mySql-uppgifter.
- Öppna Retrieve 2004-2005 Orders och ställ in Operation på
executeQuery. - Ställ in Query på
SELECT customerNumber, SUM(amount) as Total, COUNT(*) as ordercount, YEAR(paymentDate) as year FROM payments WHERE YEAR(paymentDate) = '2004' OR YEAR(paymentDate) = '2005' GROUP BY customerNumber, year ;. - Inloggningsuppgifter krävs: Anslut era mySql-uppgifter.
Steg 3: Sätt upp bearbetningsnoden
Normalisera datamängden så att jämförelsenoden får ett konsekvent fält för antal ordrar.
- Öppna Set Order Count och lägg till ett nummerfält.
- Ställ in Name till
ordercountoch Value till1. - Koppla Retrieve 2004-2005 Orders till Set Order Count.
Steg 4: Konfigurera jämförelsen av datamängder
Jämför båda datamängderna baserat på kundnummer och år.
- Öppna Dataset Comparison och ställ in Merge By Fields så att
customerNumbermatchas medcustomerNumberochyearmedyear. - Ställ in Multiple Matches till
allunder Options. - Koppla Retrieve 2003-2004 Orders till input 0 på Dataset Comparison.
- Koppla Set Order Count till input 1 på Dataset Comparison.
customerNumber och year.Steg 5: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att validera jämförelseutdata innan ni aktiverar arbetsflödet.
- Klicka på Execute Workflow för att trigga Manual Execution Start.
- Bekräfta att båda SQL-frågorna körs och att Dataset Comparison returnerar matchade rader utifrån
customerNumberochyear. - Om resultaten ser korrekta ut, växla arbetsflödet till Active för användning i produktion.
Se upp för
- MySQL-inloggningsuppgifter kan gå ut eller kräva specifika behörigheter. Om det skapar fel, kontrollera först användarens grants och anslutningsinställningarna i n8n.
- Om du ändrar SQL-utdatakolumnerna kan Compare Datasets märka allt som “olika”. Håll fältnamn konsekventa i båda frågorna innan du antar att datan är fel.
- Google Sheets kan misslyckas tyst när du skickar inkonsekventa datatyper (tal vs. text). Om ditt ark ser “fel” ut, normalisera fält i Set-steget innan du skriver rader.
Vanliga frågor
Cirka 30 minuter om du redan har SQL-frågorna.
Ja, men någon behöver ta fram (eller godkänna) SQL:en. Resten handlar mest om att koppla MySQL och mappa fält för utdata till Google Sheet.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för MySQL-hosting om du inte redan kör det.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Du kan byta ut de två MySQL-frågenoderna så att de matchar dina egna rapporttabeller och datumfönster. Om du inte behöver justera orderantal, ta bort eller skriv om steget “Set Order Count” så att båda datamängderna blir jämförbara. Vanliga justeringar är att jämföra månad-för-månad i stället för år-för-år, lägga till ett fält för “affärsenhet” i grupperingen och filtrera bort testordrar innan jämförelsen.
Oftast beror det på utgångna inloggningsuppgifter eller att databasens host/IP inte är nåbar från din n8n-instans. Uppdatera MySQL-inloggningsuppgifterna i n8n, bekräfta att användaren har behörighet att köra de SELECT-satser du använder och kontrollera brandväggsregler om du kör egen hosting. Om frågorna fungerar i en databasklient men inte i n8n beror det ofta på TLS/SSL-inställningar eller en saknad port i anslutningskonfigurationen.
För de flesta rapportsummeringar skalar den utan problem.
Ofta, ja. Zapier och Make är bra för enkla “när X händer, gör Y”, men att jämföra två datamängder på ett strukturerat sätt kräver ofta förgreningar, strukturerad utdata och lite transformationslogik. n8n hanterar det utan att din automation blir en hög av separata zaps eller scenarion. Dessutom är egen hosting viktig här: du kan köra jämförelser så ofta du vill utan att oroa dig för task-limiter. Om du bara gör en liten export i två steg till Sheets en gång i månaden kan Zapier vara enklare. Prata med en automationsexpert om du vill ha hjälp att välja.
När du direkt kan se vad som saknas, matchar eller skiljer sig förändras diskussionen. Arbetsflödet tar hand om den repetitiva kontrollen så att du kan fokusera på vad siffrorna faktiskt betyder.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.