Deze functie is alleen beschikbaar in Analytics 360, een onderdeel van Google Marketing Platform. Meer informatie over Google Marketing Platform |
In dit artikel staan voorbeelden van de manieren waarop u query's kunt uitwerken met de Analytics-gegevens die u naar BigQuery exporteert. We hebben een voorbeelddataset samengesteld, zodat u kunt oefenen met een aantal query's in dit artikel.
In dit artikel vindt u informatie over het volgende:- Optimalisatie van query's
- Tips en best practices
- Voorbeelden van eenvoudige query's
- Totaal aantal [statistiek] per [dimensie]
- Het gemiddelde bouncepercentage per [dimensie]
- Het gemiddelde aantal weergaven van productpagina's per type koper
- Het gemiddelde aantal transacties per koper
- Het bedrag dat gemiddeld per sessie is besteed
- Volgorde van hits (padanalyse)
- Meerdere aangepaste dimensies op hit- of sessieniveau
- Voorbeelden van geavanceerde query's
- Producten die zijn gekocht door klanten die product A hebben gekocht (klassieke e-commerce)
- Producten die zijn gekocht door klanten die product A hebben gekocht (geoptimaliseerde e-commerce)
- Het gemiddelde aantal gebruikersinteracties vóór de aankoop
- Percentage verkochte voorraad per product
- Winstgevendheid van elk product
- Reële winstgevendheid van elk product
Optimalisatie van query's
Elke query die u uitvoert, telt mee voor uw maandelijkse tegoed voor gegevensverwerking. Als u overbodige velden selecteert, verhoogt u de hoeveelheid gegevens die moeten worden verwerkt, en hierdoor verbruikt u meer van uw maandelijkse tegoed dan nodig is. Geoptimaliseerde query's maken efficiënter gebruik van uw maandelijkse gegevensverwerkingstegoed.
Meer informatie over prijzen
Selecteer alleen wat u nodig heeft
Wanneer u een query formuleert, selecteert u de relevante velden binnen de uitdrukking 'SELECT'. Door overbodige velden niet aan te roepen, verlaagt u de hoeveelheid gegevens en de tijd die nodig is om de query te verwerken.
Voorbeeld: vermijd gebruik van het jokerteken
Slechte formulering: gebruik van het jokerteken |
---|
SELECT * |
Betere formulering: veldnamen gebruiken om onnodige verwerking te vermijden |
---|
SELECT field1, field2 |
Opslaan in cachegeheugen toestaan
Vermijd waar mogelijk het gebruik van velden als functies. Functies (zoals NOW()
of TODAY()
) retourneren variabele resultaten, die voorkomen dat query's worden gecachet en zodoende sneller worden geretourneerd. Gebruik in plaats daarvan specifieke tijden en datums.
Tussentijdse tabellen gebruiken voor veelgebruikte subquery's
Als u constateert dat u vaak een specifieke query als subquery gebruikt, kunt u die query opslaan als tussentijdse tabel door op Opslaan als tabel boven de resultaten van query's te klikken. Daarna kunt u die tabel bekijken in het gedeelte FROM
van uw query, waardoor de hoeveelheid te verwerken gegevens en de nodige verwerkingstijd worden verminderd.
een tussentijdse tabel gebruiken |
---|
SELECT field1, field2 |
Fouten in query's opsporen
BigQuery spoort fouten in uw code op terwijl u deze uitwerkt. In het opstelvenster ziet u de informatie over foutopsporing vlak onder de query. Foutopsporing is ook beschikbaar via de API met dryRun-markering.
Geldige query's hebben een groene indicator waarop u kunt klikken om te bekijken hoeveel gegevens door de query worden verwerkt. Met deze functie kunt u uw gegevens optimaliseren voordat u de query uitvoert, zodat u voorkomt dat gegevens onnodig worden verwerkt.
Ongeldige query's hebben een rode indicator waarop u kunt klikken om informatie over de fout te bekijken, en de regel en de kolom te vinden waar de fout is opgetreden. In het onderstaande voorbeeld is de uitdrukking 'GROUP BY' leeg gelaten en is de fout gemarkeerd.
Tips en best practices
De voorbeelddataset gebruiken
In de volgende voorbeelden wordt de voorbeelddataset van Google Analytics gebruikt.
Als u de query's op uw eigen gegevens wilt gebruiken, vervangt u eenvoudig de project- en datasetnamen in de voorbeelden door uw eigen project- en datasetnamen.
Standaard SQL versus Legacy SQL gebruiken
BigQuery ondersteunt 2 SQL-dialecten:
In Migratie naar Standaard SQL worden de verschillen tussen de 2 dialecten uitgelegd.
Standaard SQL is het SQL-dialect dat nu de voorkeur heeft voor gegevens opvragen die zijn opgeslagen in BigQuery.
Zie Standaard SQL aanzetten voor informatie over hoe u Standaard SQL aanzet in de BigQuery-UI, -CLI, -API of welke interface u ook gebruikt.
De makkelijkste manier om aan de slag te gaan is door de opmerking 'standardSQL' op te nemen bovenaan uw standaard SQL-query's, zoals in de volgende voorbeelden wordt getoond.
Met Legacy SQL worden Google Analytics 360-gegevens elke dag opgenomen in een nieuwe tabel. Als u een query voor meerdere tabellen tegelijk wilt uitvoeren, kunt u de tabelnamen met komma's van elkaar scheiden, de TABLE_DATE_RANGE
-jokertekenfunctie voor tabellen gebruiken of meerdere door komma's gescheiden TABLE_DATE_RANGE
-functies gebruiken, zoals in de volgende voorbeelden.
Query's voor meerdere tabellen
In de volgende voorbeelden ziet u standaard SQL- en legacy SQL-query's voor dezelfde gegevens.
3 dagen
Standaard SQL
3 dagen met UNION ALL |
---|
#standardSQL |
Legacy SQL
3 dagen met door komma's gescheiden tabelnamen |
---|
SELECT |
Afgelopen 1095 dagen
Standaard SQL
Afgelopen 1095 dagen met _TABLE_SUFFIX |
---|
#standardSQL |
Legacy SQL
Afgelopen 1095 dagen met TABLE_DATE_RANGE |
---|
SELECT |
Afgelopen 36 maanden
Standaard SQL
Afgelopen 36 maanden met _TABLE_SUFFIX |
---|
#standardSQL |
Legacy SQL
Afgelopen 36 maanden met TABLE_DATE_RANGE |
---|
SELECT |
Afgelopen 3 jaar
Standaard SQL
Afgelopen 3 jaar met _TABLE_SUFFIX |
---|
#standardSQL |
Legacy SQL
Afgelopen 3 jaar met TABLE_DATE_RANGE |
---|
SELECT |
Specifieke periode
Standaard SQL
Specifieke periode met _TABLE_SUFFIX |
---|
#standardSQL |
Legacy SQL
Specifieke periode met TABLE_DATE_RANGE |
---|
SELECT |
Afgelopen 3 jaar plus de gegevens van vandaag (intradag)
Standaard SQL
Afgelopen 3 jaar plus de gegevens van vandaag (intradag) met UNION ALL en _TABLE_SUFFIX |
---|
Opmerking: Deze voorbeeldquery werkt niet met de openbare dataset van Google Analytics omdat er momenteel geen intradagtabel is. |
#standardSQL |
Legacy SQL
Afgelopen 3 jaar plus de gegevens van vandaag (intradag) met TABLE_DATE_RANGE |
---|
Opmerking: Deze voorbeeldquery werkt niet met de openbare dataset van Google Analytics omdat er momenteel geen intradagtabel is. |
SELECT |
Voorbeelden van eenvoudige query's
In dit gedeelte wordt uitgelegd hoe basisquery's kunnen worden uitgewerkt aan de hand van statistieken en dimensies van voorbeeldgegevens van Analytics.
Totaal aantal [statistiek] per [dimensie]?
Hieronder staan voorbeeldscripts voor de vraag: Wat is het totale aantal transacties dat in juli 2017 per apparaatbrowser is gegenereerd?
Standaard SQL
Totaal aantal transacties per apparaatbrowser in juli 2017 |
---|
#standardSQL |
Legacy SQL
Totaal aantal transacties per apparaatbrowser in juli 2017 |
---|
SELECT |
Het gemiddelde bouncepercentage per [ dimensie ]?
Het reële bouncepercentage is gedefinieerd als het percentage bezoeken met één paginaweergave. Hieronder staan voorbeeldscripts voor de vraag: Wat was het reële bouncepercentage per verkeersbron?
Standaard SQL
Bouncepercentage per verkeersbron in juli 2017 |
---|
#standardSQL |
Legacy SQL
Bouncepercentage per verkeersbron in juli 2017 |
---|
SELECT |
Het gemiddelde aantal weergaven van productpagina's per type koper (kopers vs. niet-kopers)
Hieronder staan voorbeeldscripts voor de vraag: Wat was het gemiddelde aantal productpaginaweergaven voor gebruikers die in juli 2017 een aankoop hebben gedaan?
Standaard SQL
Gemiddeld aantal productpaginaweergaven voor gebruikers die in juli 2017 een aankoop hebben gedaan |
---|
#standardSQL |
Legacy SQL
Gemiddeld aantal productpaginaweergaven voor gebruikers die in juli 2017 een aankoop hebben gedaan |
---|
SELECT |
Hieronder staan voorbeeldscripts voor de vraag: Wat was het gemiddelde aantal productpaginaweergaven voor gebruikers die in juli 2017 geen aankoop hebben gedaan?
Standaard SQL
Gemiddeld aantal productpaginaweergaven voor gebruikers die in juli 2017 geen aankoop hebben gedaan |
---|
#standardSQL |
Legacy SQL
Gemiddeld aantal productpaginaweergaven voor gebruikers die in juli 2017 geen aankoop hebben gedaan |
---|
SELECT |
Het gemiddelde aantal transacties per koper
Hieronder staan voorbeeldscripts voor de vraag: Wat waren het gemiddelde totale aantal transacties per gebruiker die een aankoop deed in juli 2017?
Standaard SQL
Gemiddeld totale aantal transacties per gebruiker die een aankoop deed in juli 2017 |
---|
#standardSQL |
Legacy SQL
Gemiddeld totale aantal transacties per gebruiker die een aankoop deed in juli 2017 |
---|
SELECT |
Het bedrag dat gemiddeld per sessie is besteed
Hieronder staan voorbeeldscripts voor de vraag: Wat is het gemiddelde bedrag dat per sessie is uitgegeven in juli 2017?
Standaard SQL
Gemiddeld bedrag dat per sessie is besteed in juli 2017 |
---|
#standardSQL |
Legacy SQL
Gemiddeld bedrag dat per sessie is besteed in juli 2017 |
---|
SELECT |
Reeks van hits
Hieronder staan voorbeeldscripts voor de vraag: Wat is de volgorde van de bekeken pagina's?
Standaard SQL
Reeks van pagina's die gebruikers in juli 2017 hebben bekeken |
---|
#standardSQL |
Legacy SQL
Reeks van pagina's die gebruikers in juli 2017 hebben bekeken |
---|
SELECT |
In deze query beperkt u de typen hits tot PAGES
om te voorkomen dat er interacties met gebeurtenissen of transacties worden getoond. Elke regel van de uitvoer staat voor een paginaweergave en deze wordt getoond in de standaardvolgorde van de velden in de instructie SELECT
.
Meerdere aangepaste dimensies op hit- of sessieniveau
aangepaste dimensie op hitniveau |
---|
SELECT fullVisitorId, visitId, hits.hitNumber, hits.time, |
aangepaste dimensie op sessieniveau |
---|
SELECT fullVisitorId, visitId, |
In elke query:
De instructie SELECT
vraagt om de relevante dimensie- en statistiekvelden.
De functie MAX
:
- Retourneert de aangepaste dimensie als nieuwe kolom. U kunt de functie herhalen om meerdere aangepaste dimensies te retourneren als nieuwe kolommen.
WITHIN hits
enWITHIN RECORD
evalueren de voorwaarde in herhaalde velden in BigQuery.- De voorwaarde in
MAX
wordt geëvalueerd voor elke aangepaste dimensie, maar voor elke waarde die nietindex=1 (hits)
ofindex=2 (sessies)
is, wordtNULL
geretourneerd. - Retourneert de maximumwaarde, dat wil zeggen de waarde van Aangepaste dimensie 1 voor hits of Aangepaste dimensie 2 voor sessies, aangezien alle andere waarden
NULL
zijn.
Voorbeelden van geavanceerde query's
Nu u bekend bent met eenvoudige query's, kunt u query's uitwerken met behulp van de geavanceerde functies die beschikbaar zijn in BigQuery.
Producten die zijn gekocht door klanten die product A hebben gekocht (klassieke e-commerce)
Hieronder vindt u een skeletscript voor de vraag: Welke andere producten zijn gekocht door klanten die product A hebben gekocht?
producten die zijn gekocht door een klant die product A heeft gekocht (klassieke e-commerce) |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
- In de eerste regel selecteert u alle andere artikelen die een gebruiker heeft gekocht en gebruikt u de verzamelfunctie
COUNT()
om de totalen van elk ander gekocht artikel te berekenen. Het resultaat is daarna te zien in een veld met de naamquantity
, samen met het gekoppelde artikel in het productveld met de naamother_purchased_products
. - In de grijze subquery selecteert u uitsluitend de unieke gebruikers (
fullVisitorId
) die transacties (totals.transactions>=1
) hebben uitgevoerd en Product A hebben gekocht tijdens een transactie (WHERE hits.item.productName CONTAINS 'Naam van product A'
).
De regels (instructies WHERE
en AND
statements) in de query op het hoogste niveau (groen) negeren waarden in hits.item.productName
die leeg zijn en product A bevatten.
Hier volgt een voorbeeld voor de vraag: Als een klant 'Metalen pennen van Brighton - Set van 4' koopt, welke andere producten heeft deze klant nog meer gekocht?
producten die zijn gekocht door een klant die 'Metalen pennen van Brighton (Set van 4)' heeft gekocht op 24 juni 2013 |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
Als u in Dremel/BigQuery de instructie WHERE expr IN
gebruikt, wordt een JOIN geactiveerd en gelden er beperkingen voor de grootte; de grootte van de rechterkant van de JOIN (in dit geval het aantal bezoekers) moet minder dan 8 MB zijn. In Dremel wordt dit broadcast JOIN genoemd. Als de grootte 8 MB overschrijdt, moet u een shuffled JOIN activeren met behulp van de syntaxis JOIN EACH. U kunt dit helaas niet doen met IN, maar u kunt dezelfde query wel herschrijven met een JOIN.
Producten die zijn gekocht door klanten die product A hebben gekocht (geoptimaliseerde e-commerce)
Dit skeletscript is vergelijkbaar met het vorige skeletscript, maar werkt voor geoptimaliseerde e-commerce. Het maakt ook gebruik van TABLE_DATE_RANGE
om in gegevens van meerdere dagen te zoeken.
producten die zijn gekocht door een klant die product A heeft gekocht (geoptimaliseerde e-commerce) |
---|
SELECT hits.product.productSKU AS other_purchased_products, COUNT(hits.product.productSKU) AS quantity |
Het gemiddelde aantal gebruikersinteracties vóór de aankoop
Dit is een voorbeeld van een query van een JOIN() [...] ON
-opdracht die alleen afhankelijk is van Analytics-gegevens.
Hieronder vindt u een skeletscript voor de vraag: Wat is het gemiddelde aantal gebruikersinteracties vóór een aankoop?
aantal gebruikersinteracties vóór een aankoop |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
- De eerste regel voert de wiskundige hoofdbewerking uit om het gemiddelde aantal gebruikersinteracties per product te achterhalen, en deze query brengt een samenvoeging van 2 subquery's tot stand. Deze subquery's worden Alias_Name_1 en Alias_Name_2 genoemd.
- ‘Alias_Name_1’ wordt gebruikt om een veld te maken dat gebruikmaakt van de verzamelfunctie
SUM()
om alle geregistreerde hits voor een product op te tellen. - ‘Alias_Name_2’ wordt gebruikt om het aantal hits van gebruikers per product te achterhalen, met behulp van de functie
COUNT()
. - In de laatste regel wordt het algemene veld (
hits.item.productSku
) gedeeld tussen de twee samengevoegde datasets.
Hier volgt een voorbeeld voor de vraag: Wat is op 10 september 2013 het gemiddelde aantal gebruikersinteracties voordat er een aankoop wordt gedaan?
aantal gebruikersinteracties voor een aankoop op 10 september 2013 |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
Percentage verkochte voorraad per product
Dit is een voorbeeld van een query die niet alleen afhankelijk is van Analytics-gegevens, maar ook van gegevens die niet afkomstig zijn van Analytics. Door beide datasets te combineren, kunt u inzicht krijgen in het gedrag van gebruikers op een meer gesegmenteerd niveau. U kunt gegevens die niet afkomstig zijn van Analytics, in BigQuery importeren, maar houd er rekening mee dat dit bijdraagt aan uw maandelijkse kosten voor gegevensopslag.
Hieronder vindt u een skeletscript voor de vraag: Welk percentage voorraad is er per product verkocht?
percentage verkochte voorraad per product |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ((( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold )) * 100 ) AS percentage_of_stock_sold |
- De eerste regel voert 2 velden uit: een veld met alle product-ID's en een veld met een wiskundige bewerking waarin het percentage voorraad dat voor die product-ID is verkocht, wordt getoond.
- Aangezien deze query afhankelijk is van 2 datasets, moet u de functie
JOIN() ... ON
gebruiken. Met deze opdracht worden de rijen van de 2 datasets samengevoegd op basis van het algemene veld ertussen. In dit geval zijn dit de 2 datasets:[ ‘Imported_DataSet’ ]
en‘Alias_Name’
. [ ‘Imported_DataSet’ ]
bevat de gegevens die niet afkomstig zijn van Analytics. Deze dataset bevat het statistiekveld voor het aantal producten dat nog op voorraad is (Imported_DataSet.’stock_left_field’
) en het dimensieveld 'Product-ID' (Imported_DataSet.’productId_field’
).‘Alias_Name’
is de naam die is toegewezen aan de gegevens die zijn geretourneerd door de grijze subquery. Deze subquery maakt gebruik van Analytics-gegevens om het totale aantal verkochte artikelen per product te achterhalen.- De laatste regel gebruikt de instructie
ON
om het algemene veld tussen de 2 datasets en de locatie waar de 2 datasets zijn samengevoegd, te laten zien.
De naam van de dataset is aan veel variabelen in deze query als voorvoegsel gekoppeld (bijv. Imported_DataSet.’productId_field’, Alias_Name.quantity_sold
). Dit wordt gedaan om te verduidelijken welk veld u selecteert en om expliciet aan te geven tot welke dataset de variabele behoort.
Hier volgt een voorbeeld voor de vraag: Welk percentage van de voorraad werd per product verkocht op 28 juli 2013?
percentage verkochte voorraad per product op 28 juli 2013 |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ( ( ( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold ) ) * 100 ) AS percentage_of_stock_sold |
Winstgevendheid van elk product
Hieronder vindt u een skeletscript voor de vraag: Wat is de winstgevendheid van elk product?
winst per product |
---|
SELECT Alias_Name.hits.item.productSku, ( Imported_DataSet.’product profit field’ * Alias_Name.quantity ) AS profit |
- De eerste regel bevat de wiskundige bewerking waarmee de totale winst voor elk product kan worden berekend.
- De grijze subquery maakt gebruik van gegevens die niet afkomstig zijn van Analytics en verzamelt gegevens over hoeveel winst er wordt gemaakt wanneer er een product wordt verkocht.
- De rode subquery is de subquery voor Analytics-gegevens, die wordt samengevoegd met gegevens die niet afkomstig zijn van Analytics. Deze berekent het aantal verkochte artikelen per product.
- De laatste regel maakt gebruik van de instructie
ON
om te verduidelijken welk veld de 2 datasets delen. In dit geval is dit de product-ID.
Hier volgt een voorbeeld van de query: Wat was de winstgevendheid van elk product op 28 juli 2013?
winst per product op 28 juli 2013 |
---|
SELECT two.hits.item.productSku, ((AnalyticsImport.product_data_20130728.productprice-AnalyticsImport.product_data_20130728.productcost)*two.quantity) AS profit |
De winst wordt berekend aan de hand van het verschil tussen de verkoopprijs van het product en de productiekosten van het product. Deze informatie wordt opgeslagen in de dataset met gegevens die niet afkomstig zijn van GA.
De reële winstgevendheid van elk product (waarbij rekening wordt gehouden met terugbetalingen)
Hieronder vindt u een skeletscript voor de vraag: Wat is de reële winstgevendheid van elk product?
reële winst per product |
---|
SELECT Alias_Name.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
- Deze query lijkt veel op Wat is de winstgevendheid van elk product? De enige verschillen zitten in de dataset met gegevens die niet afkomstig zijn van Analytics in de grijze subquery en in de mathematische bewerking in de eerste regel die de reële winst berekent.
- In de dataset met gegevens die niet afkomstig zijn van Analytics, berekent u ook het totale bedrag dat aan terugbetalingen is besteed (in de instructie
SELECT
van de rode subquery). - Daarna voert u in regel 1 een wiskundige bewerking uit om de reële winst te achterhalen: uw brutowinst min de opbrengst die aan terugbetalingen is besteed.
Ga voor meer informatie over de query naar het gedeelte over de winstgevendheid van elk product.
Hier volgt een voorbeeld van de query: Wat was de reële winstgevendheid van elk product op 28 juli 2013?
reële winst per product op 28 juli 2013 |
---|
SELECT two.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
De reële winst is de winstgevendheid van een product nadat het bedrag voor terugbetaalde producten daarvan is afgetrokken. Doe het volgende om de totale terugbetaalde opbrengst van een product te berekenen:
totale terugbetaalde opbrengst van een product = ( de prijs van het product + de terug te betalen leveringsprijs van het product ) * het aantal terugbetaalde producten