Google Analytics Data API v1, dönüşüm hunisi raporları oluşturmanıza olanak tanır. Dönüşüm hunisi keşfi, kullanıcılarınızın bir dönüşüm hunisini tamamlamak için uyguladığı adımları görselleştirmenize her adımda ne kadar başarılı ya da başarısız olduklarını hızlıca görebilmelerini sağlar.
Temel Raporlarda Paylaşılan Özellikler
Dönüşüm hunisi raporlama istekleri, birçok ortak özellik. Örneğin, sayfalara ayırma, Boyut Filtreleri ve Kullanıcı Mülkler, Dönüşüm Hunisi Raporlarında Temel Raporlar ile aynı şekilde davranır. Bu rehberimizde dönüşüm hunisi raporlama özelliklerine odaklanacağız. Google Ads'in Data API v1'in temel raporlama işlevi için raporlamayla ilgili temel bilgiler kılavuzunu okuyun. ve ileri düzey kullanım alanları rehberini inceleyin.
Dönüşüm hunisi raporlama yöntemi
Data API v1, runFunnelReport
'da dönüşüm hunisi raporlama özelliklerini destekler.
yöntemidir. Bu yöntem, Google Analytics hesabınızın özelleştirilmiş dönüşüm hunisi raporunu döndürür.
etkinlik verileri.
Rapor eden varlık seçme
Data API v1'in tüm yöntemleri için Google Analytics mülk tanımlayıcısı gerekir.
properties/GA_PROPERTY_ID
, örneğin:
POST https://analyticsdata.googleapis.com/v1alpha/properties/GA_PROPERTY_ID:runFunnelReport
Elde edilen rapor, Google Analytics etkinlik verilerini temel alarak oluşturulur toplanan verileri içerebilir.
Data API istemci kitaplıklarından birini kullanıyorsanız
istek URL'sinin yolunu manuel olarak değiştirmeye gerek yoktur. Çoğu API istemcisi
şu biçimde bir dize bekleyen bir property
parametresi sağlayın:
properties/GA_PROPERTY_ID
. Hızlı başlangıç kılavuzunu inceleyin.
istemci kitaplıklarını
kullanıma ilişkin örneklere göz atın.
Dönüşüm Hunisi Rapor İsteği
Dönüşüm hunisi raporu istemek için bir RunFunnelReportRequest
oluşturabilirsiniz
nesnesini tanımlayın. Şu istek parametreleriyle başlamanızı öneririz:
dateRanges
girin.funnel
'nda geçerli bir dönüşüm hunisi spesifikasyonu girin.
Dönüşüm Hunisi Spesifikasyonu
funnel
'ndaki bir dönüşüm hunisi spesifikasyonu
RunFunnelReportRequest
alanı
nesne, steps
ile ölçmek istediğiniz kullanıcı yolculuğunu tanımlar
seçmeniz gerekir.
Dönüşüm hunisi adımları, kullanıcılarınızın dönüşüm gerçekleştirmeleri için karşılaması gereken bir veya daha fazla koşul içerir.
dahil edilir. Her birine dahil edilme koşulları
adım adım açıklama
filterExpression
alanına girin.
Her dönüşüm hunisi filtre ifadesi, iki tür filtrenin bir kombinasyonudur:
funnelFieldFilter
, bir boyut veya metrik için filtre oluşturur.funnelEventFilter
tek bir etkinlik adındaki etkinliklerle eşleşen bir filtre oluşturur. İsteğe bağlıfunnelParameterFilterExpression
alanı belirtildiğinde, yalnızca tek bir etkinlikle eşleşen etkinliklerin alt kümesi name ve parametre filtresi ifadelerinin bu etkinlik filtresiyle eşleştiğini unutmayın.
Filtreler AND
,
VEYA
gruplar ve bir NOT
ifadesi kullanılarak reddedilir.
Her dönüşüm hunisi adımı için rapor sonuçları boyuta göre ayrılır
ve
funnelBreakdown
girin.
Dönüşüm Hunisi Raporu Örneği
Aşağıdaki örnekte, varsayılan dönüşüm hunisini yeniden oluşturmak için Google Analytics Data API v1 kullanılmaktadır Dönüşüm Hunisi keşif şablonunun Google Analytics web arayüzü:
Dönüşüm Hunisi Adımları
Önceki dönüşüm hunisi yapılandırması aşağıdaki adımları içerir:
# | Adım adı | Koşul |
---|---|---|
1 | İlk açılışı/ziyareti gerçekleştirenler | Etkinlik adı: first_open veya first_visit . |
2 | Organik ziyaretçiler | firstUserMedium boyutu, "organik" terimini içeriyor. |
3 | Oturum başlatma | Etkinliğin adı: session_start . |
4 | Ekran/Sayfa görüntüleyenler | Etkinlik adı: screen_view veya page_view . |
5 | Satın al | Etkinlik adı: purchase veya in_app_purchase . |
Dönüşüm hunisinin 1. Adımı (İlk açılış/ziyaret), ilk açılışlarından sonraki tüm kullanıcıları içerir
bir web sitesi veya uygulamayla etkileşim (ör. reklamı tetikleyen kullanıcılar
first_open
veya first_visit
etkinlik.
Bu davranışı uygulamak için aşağıdaki snippet, FunnelStep
filterExpression
alanı için geçerlidir.
Filtre ifadesi alanı bir FunnelFilterExpression
nesnesidir
iki projenin bir araya getirilerek
FunnelEventFilter
VEYA kullanan varlıklar
grubu olarak gönderin.
{
"name": "Purchase",
"filterExpression": {
"orGroup": {
"expressions": [
{
"funnelEventFilter": {
"eventName": "first_open"
}
},
{
"funnelEventFilter": {
"eventName": "first_visit"
}
}
]
}
}
}
Dönüşüm hunisinin 2. Adımı (Organik ziyaretçiler), ilk aracısı
"organik" terimini içerir. Aşağıdaki snippet'te fieldName
FunnelFieldFilter
alanı
değeri, filtreye firstUserMedium
boyutuyla eşleşmesi için talimat verir.
stringFilter
alanı, yalnızca
"organik" terimini içeren boyut.
{
"name": "Organic visitors",
"filterExpression": {
"funnelFieldFilter": {
"fieldName": "firstUserMedium",
"stringFilter": {
"matchType": "CONTAINS",
"caseSensitive": false,
"value": "organic"
}
}
}
}
Geri kalan dönüşüm hunisi adımları da benzer bir şekilde belirtilebilir.
Döküm Boyutu
İsteğe bağlı bir döküm boyutu (bu örnekte deviceCategory
)
FunnelBreakdown
kullanılarak belirtilir
nesne:
"funnelBreakdown": {
"breakdownDimension": {
"name": "deviceCategory"
}
}
Varsayılan olarak, döküm boyutunun yalnızca ilk 5 farklı değeri
dahil edilir. Şunu kullanabilirsiniz: limit
alanını FunnelBreakdown
nesnesinin dışına yerleştirin.
Dönüşüm Hunisi Raporu Sorgusunu Tamamlama
Dönüşüm hunisi raporu oluşturan tam bir sorguyu aşağıda görebilirsiniz:
HTTP
POST https://analyticsdata.googleapis.com/v1alpha/properties/GA_PROPERTY_ID:runFunnelReport
{
"dateRanges": [
{
"startDate": "30daysAgo",
"endDate": "today"
}
],
"funnelBreakdown": {
"breakdownDimension": {
"name": "deviceCategory"
}
},
"funnel": {
"steps": [
{
"name": "First open/visit",
"filterExpression": {
"orGroup": {
"expressions": [
{
"funnelEventFilter": {
"eventName": "first_open"
}
},
{
"funnelEventFilter": {
"eventName": "first_visit"
}
}
]
}
}
},
{
"name": "Organic visitors",
"filterExpression": {
"funnelFieldFilter": {
"fieldName": "firstUserMedium",
"stringFilter": {
"matchType": "CONTAINS",
"caseSensitive": false,
"value": "organic"
}
}
}
},
{
"name": "Session start",
"filterExpression": {
"funnelEventFilter": {
"eventName": "session_start"
}
}
},
{
"name": "Screen/Page view",
"filterExpression": {
"orGroup": {
"expressions": [
{
"funnelEventFilter": {
"eventName": "screen_view"
}
},
{
"funnelEventFilter": {
"eventName": "page_view"
}
}
]
}
}
},
{
"name": "Purchase",
"filterExpression": {
"orGroup": {
"expressions": [
{
"funnelEventFilter": {
"eventName": "purchase"
}
},
{
"funnelEventFilter": {
"eventName": "in_app_purchase"
}
}
]
}
}
}
]
}
}
Yanıtı Bildir
Dönüşüm Hunisi Raporu Yanıtı
bir dönüşüm hunisi raporu API isteği, iki ana bölümden oluşur. Her ikisi de
FunnelSubReport
olarak
nesne: Dönüşüm Hunisi Görselleştirme ve Dönüşüm Hunisi Tablosu.
Huni Görselleştirme
funnelVisualization
bölümünde döndürülen Dönüşüm Hunisi Görselleştirme
Dönüşüm Hunisi Raporu Yanıtı'nın altındaki
dönüşüm hunisi raporuna üst düzey bir genel bakış içerir. Bu,
oluşturulan dönüşüm hunisi raporunun hızlı bir şekilde görselleştirilmesi için kullanılır.
Dönüşüm hunisi görselleştirme tablosunun her satırı, dönüşüm hunisinin üst kısmındaki şu alanları kullanın:
Dönüşüm hunisi adımı adı (
funnelStepName
boyut).Etkin kullanıcı sayısı (
activeUsers
metrik).Segment (
segment
boyut). YalnızcaSegment
varsa göster değeri dönüşüm hunisi sorgusunda belirtilir.Tarih (
date
boyut). YalnızcaTRENDED_FUNNEL
görselleştirme türünün sorguda belirtilmesi.Sonraki işlem boyutu (
funnelStepNextAction
boyut). YalnızcaFunnelNextAction
değeri dönüşüm hunisi sorgusunda belirtilir.
Google Analytics web arayüzünün, Dönüşüm Hunisini nasıl gösterdiği aşağıda açıklanmıştır: görselleştirme bölümüne bakın:
Dönüşüm Hunisi Tablosu
funnelTable
bölümünde döndürülen Dönüşüm Hunisi Tablosu
Dönüşüm Hunisi Raporu Yanıtı'nın altındaki
raporun ana bölümünü temsil eder. Tablodaki her bir satır
aşağıdaki alanların bazılarını veya tümünü içerir:
Dönüşüm hunisi adımı adı (
funnelStepName
boyut).Döküm boyutu.
Etkin kullanıcı sayısı (
activeUsers
metrik).Adım tamamlanma oranı (
funnelStepCompletionRate
metrik).Adımı terk edenlerin sayısı (
funnelStepAbandonments
metrik).Adım vazgeçme oranı (
funnelStepAbandonmentRate
metrik).Segment adı (
segment
boyut). YalnızcaSegment
varsa göster değeri dönüşüm hunisi sorgusunda belirtilir.
Toplam değerler,
döküm boyutu değeri olarak RESERVED_TOTAL
içeren ayrı satırda yer alır.
Aşağıda, Google Analytics web sayfasında görüntülenen bir Dönüşüm Hunisi Tablosu örneği verilmiştir: arayüz:
Ham yanıt
Aşağıdaki snippet, yanıt olarak döndürülen ham verilerin bir örneğini göstermektedir
runFunnelReport
sorgusuna ekleyin.
Mülkünüz tarafından toplanan verilere bağlı olarak örnek rapor, şuna dahil edilen etkin kullanıcıların sayısını gösteren aşağıdaki raporu döndür: her bir dönüşüm hunisi adımını oluşturur.
{
"funnelTable": {
"dimensionHeaders": [
{
"name": "funnelStepName"
},
{
"name": "deviceCategory"
}
],
"metricHeaders": [
{
"name": "activeUsers",
"type": "TYPE_INTEGER"
},
{
"name": "funnelStepCompletionRate",
"type": "TYPE_INTEGER"
},
{
"name": "funnelStepAbandonments",
"type": "TYPE_INTEGER"
},
{
"name": "funnelStepAbandonmentRate",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "1. First open/visit"
},
{
"value": "RESERVED_TOTAL"
}
],
"metricValues": [
{
"value": "4621565"
},
{
"value": "0.27780178359495106"
},
{
"value": "3337686"
},
{
"value": "0.72219821640504889"
}
]
},
{
"dimensionValues": [
{
"value": "1. First open/visit"
},
{
"value": "desktop"
}
],
"metricValues": [
{
"value": "4015959"
},
{
"value": "0.27425279989163237"
},
{
"value": "2914571"
},
{
"value": "0.72574720010836768"
}
]
},
{
"dimensionValues": [
{
"value": "1. First open/visit"
},
{
"value": "mobile"
}
],
"metricValues": [
{
"value": "595760"
},
{
"value": "0.29156035987646034"
},
{
"value": "422060"
},
{
"value": "0.70843964012353966"
}
]
},
{
"dimensionValues": [
{
"value": "1. First open/visit"
},
{
"value": "tablet"
}
],
"metricValues": [
{
"value": "33638"
},
{
"value": "0.205571080325822"
},
{
"value": "26723"
},
{
"value": "0.79442891967417806"
}
]
},
...
],
"metadata": {
"samplingMetadatas": [
{
"samplesReadCount": "9917254",
"samplingSpaceSize": "1162365416"
}
]
}
},
"funnelVisualization": {
"dimensionHeaders": [
{
"name": "funnelStepName"
}
],
"metricHeaders": [
{
"name": "activeUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "1. First open/visit"
}
],
"metricValues": [
{
"value": "4621565"
}
]
},
...
],
"metadata": {
"samplingMetadatas": [
{
"samplesReadCount": "9917254",
"samplingSpaceSize": "1162365416"
}
]
}
},
"kind": "analyticsData#runFunnelReport"
}
İstemci kitaplıkları
Aşağıdakilerle ilgili bir açıklama için Hızlı başlangıç kılavuzuna bakın: istemci kitaplıklarının nasıl yükleneceği ve yapılandırılacağı.
Aşağıda, dönüşüm hunisi sorgusu çalıştıran ve tıklayın.
Java
import com.google.analytics.data.v1alpha.AlphaAnalyticsDataClient; import com.google.analytics.data.v1alpha.DateRange; import com.google.analytics.data.v1alpha.Dimension; import com.google.analytics.data.v1alpha.DimensionHeader; import com.google.analytics.data.v1alpha.FunnelBreakdown; import com.google.analytics.data.v1alpha.FunnelEventFilter; import com.google.analytics.data.v1alpha.FunnelFieldFilter; import com.google.analytics.data.v1alpha.FunnelFilterExpression; import com.google.analytics.data.v1alpha.FunnelFilterExpressionList; import com.google.analytics.data.v1alpha.FunnelStep; import com.google.analytics.data.v1alpha.FunnelSubReport; import com.google.analytics.data.v1alpha.MetricHeader; import com.google.analytics.data.v1alpha.Row; import com.google.analytics.data.v1alpha.RunFunnelReportRequest; import com.google.analytics.data.v1alpha.RunFunnelReportResponse; import com.google.analytics.data.v1alpha.SamplingMetadata; import com.google.analytics.data.v1alpha.StringFilter; import com.google.analytics.data.v1alpha.StringFilter.MatchType; /** * Google Analytics Data API sample application demonstrating the creation of a funnel report. * * <p>See * https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1alpha/properties/runFunnelReport * for more information. * * <p>Before you start the application, please review the comments starting with "TODO(developer)" * and update the code to use correct values. * * <p>To run this sample using Maven: * * <pre>{@code * cd google-analytics-data * mvn compile exec:java -Dexec.mainClass="com.google.analytics.data.samples.RunFunnelReportSample" * }</pre> */ public class RunFunnelReportSample { public static void main(String... args) throws Exception { /** * TODO(developer): Replace this variable with your Google Analytics 4 property ID before * running the sample. */ String propertyId = "YOUR-GA4-PROPERTY-ID"; sampleRunFunnelReport(propertyId); } /** * Runs a funnel query to build a report with 5 funnel steps. * * <ol> * <li>First open/visit (event name is `first_open` or `first_visit`). * <li>Organic visitors (`firstUserMedium` dimension contains the term "organic"). * <li>Session start (event name is `session_start`). * <li>Screen/Page view (event name is `screen_view` or `page_view`). * <li>Purchase (event name is `purchase` or `in_app_purchase`). * </ol> * * The report configuration reproduces the default funnel report provided in the Funnel * Exploration template of the Google Analytics UI. See more at * https://support.google.com/analytics/answer/9327974 */ static void sampleRunFunnelReport(String propertyId) throws Exception { // Using a default constructor instructs the client to use the credentials // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. try (AlphaAnalyticsDataClient analyticsData = AlphaAnalyticsDataClient.create()) { RunFunnelReportRequest.Builder requestBuilder = RunFunnelReportRequest.newBuilder() .setProperty("properties/" + propertyId) .addDateRanges(DateRange.newBuilder().setStartDate("30daysAgo").setEndDate("today")) .setFunnelBreakdown( FunnelBreakdown.newBuilder() .setBreakdownDimension(Dimension.newBuilder().setName("deviceCategory"))); // Adds each step of the funnel. requestBuilder .getFunnelBuilder() .addSteps( FunnelStep.newBuilder() .setName("First open/visit") .setFilterExpression( FunnelFilterExpression.newBuilder() .setOrGroup( FunnelFilterExpressionList.newBuilder() .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("first_open"))) .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("first_visit")))))); requestBuilder .getFunnelBuilder() .addSteps( FunnelStep.newBuilder() .setName("Organic visitors") .setFilterExpression( FunnelFilterExpression.newBuilder() .setFunnelFieldFilter( FunnelFieldFilter.newBuilder() .setFieldName("firstUserMedium") .setStringFilter( StringFilter.newBuilder() .setMatchType(MatchType.CONTAINS) .setCaseSensitive(false) .setValue("organic"))))); requestBuilder .getFunnelBuilder() .addSteps( FunnelStep.newBuilder() .setName("Session start") .setFilterExpression( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder().setEventName("session_start")))); requestBuilder .getFunnelBuilder() .addSteps( FunnelStep.newBuilder() .setName("Screen/Page view") .setFilterExpression( FunnelFilterExpression.newBuilder() .setOrGroup( FunnelFilterExpressionList.newBuilder() .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("screen_view"))) .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("page_view")))))); requestBuilder .getFunnelBuilder() .addSteps( FunnelStep.newBuilder() .setName("Purchase") .setFilterExpression( FunnelFilterExpression.newBuilder() .setOrGroup( FunnelFilterExpressionList.newBuilder() .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("purchase"))) .addExpressions( FunnelFilterExpression.newBuilder() .setFunnelEventFilter( FunnelEventFilter.newBuilder() .setEventName("in_app_purchase")))))); // Make the request. RunFunnelReportResponse response = analyticsData.runFunnelReport(requestBuilder.build()); printRunFunnelReportResponse(response); } } /** Prints results of a runFunnelReport call. */ static void printRunFunnelReportResponse(RunFunnelReportResponse response) { System.out.println("Report result:"); System.out.println("=== FUNNEL VISUALIZATION ==="); printFunnelSubReport(response.getFunnelVisualization()); System.out.println("=== FUNNEL TABLE ==="); printFunnelSubReport(response.getFunnelTable()); } /** Prints the contents of a FunnelSubReport object. */ private static void printFunnelSubReport(FunnelSubReport funnelSubReport) { System.out.println("Dimension headers:"); for (DimensionHeader dimensionHeader : funnelSubReport.getDimensionHeadersList()) { System.out.println(dimensionHeader.getName()); } System.out.println(); System.out.println("Metric headers:"); for (MetricHeader metricHeader : funnelSubReport.getMetricHeadersList()) { System.out.println(metricHeader.getName()); } System.out.println(); System.out.println("Dimension and metric values for each row in the report:"); for (int rowIndex = 0; rowIndex < funnelSubReport.getRowsCount(); rowIndex++) { Row row = funnelSubReport.getRows(rowIndex); for (int fieldIndex = 0; fieldIndex < row.getDimensionValuesCount(); fieldIndex++) { System.out.printf( "%s: '%s'%n", funnelSubReport.getDimensionHeaders(fieldIndex).getName(), row.getDimensionValues(fieldIndex).getValue()); } for (int fieldIndex = 0; fieldIndex < row.getMetricValuesCount(); fieldIndex++) { System.out.printf( "%s: '%s'%n", funnelSubReport.getMetricHeaders(fieldIndex).getName(), row.getMetricValues(fieldIndex).getValue()); } } System.out.println(); System.out.println("Sampling metadata for each date range:"); for (int metadataIndex = 0; metadataIndex < funnelSubReport.getMetadata().getSamplingMetadatasCount(); metadataIndex++) { SamplingMetadata samplingMetadata = funnelSubReport.getMetadata().getSamplingMetadatas(metadataIndex); System.out.printf( "Sampling metadata for date range #%d: samplesReadCount=%d, samplingSpaceSize=%d%n", metadataIndex, samplingMetadata.getSamplesReadCount(), samplingMetadata.getSamplingSpaceSize()); } } }
PHP
use Google\Analytics\Data\V1alpha\Client\AlphaAnalyticsDataClient; use Google\Analytics\Data\V1alpha\DateRange; use Google\Analytics\Data\V1alpha\Dimension; use Google\Analytics\Data\V1alpha\FunnelBreakdown; use Google\Analytics\Data\V1alpha\FunnelEventFilter; use Google\Analytics\Data\V1alpha\FunnelFieldFilter; use Google\Analytics\Data\V1alpha\FunnelFilterExpression; use Google\Analytics\Data\V1alpha\FunnelFilterExpressionList; use Google\Analytics\Data\V1alpha\FunnelStep; use Google\Analytics\Data\V1alpha\Funnel; use Google\Analytics\Data\V1alpha\FunnelSubReport; use Google\Analytics\Data\V1alpha\RunFunnelReportRequest; use Google\Analytics\Data\V1alpha\RunFunnelReportResponse; use Google\Analytics\Data\V1alpha\StringFilter; use Google\Analytics\Data\V1alpha\StringFilter\MatchType; /** * Runs a funnel query to build a report with 5 funnel steps. * * Step 1: First open/visit (event name is `first_open` or `first_visit`). * Step 2: Organic visitors (`firstUserMedium` dimension contains the term "organic"). * Step 3: Session start (event name is `session_start`). * Step 4: Screen/Page view (event name is `screen_view` or `page_view`). * Step 5: Purchase (event name is `purchase` or `in_app_purchase`). * * The report configuration reproduces the default funnel report provided in the Funnel * Exploration template of the Google Analytics UI. See more at * https://support.google.com/analytics/answer/9327974 * * @param string $propertyId Your GA-4 Property ID */ function run_funnel_report(string $propertyId) { // Create an instance of the Google Analytics Data API client library. $client = new AlphaAnalyticsDataClient(); // Create the funnel report request. $request = (new RunFunnelReportRequest()) ->setProperty('properties/' . $propertyId) ->setDateRanges([ new DateRange([ 'start_date' => '30daysAgo', 'end_date' => 'today', ]), ]) ->setFunnelBreakdown( new FunnelBreakdown([ 'breakdown_dimension' => new Dimension([ 'name' => 'deviceCategory' ]) ]) ) ->setFunnel(new Funnel()); // Add funnel steps to the funnel. // 1. Add first open/visit step. $request->getFunnel()->getSteps()[] = new FunnelStep([ 'name' => 'First open/visit', 'filter_expression' => new FunnelFilterExpression([ 'or_group' => new FunnelFilterExpressionList([ 'expressions' => [ new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'first_open', ]) ]), new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'first_visit' ]) ]) ] ]) ]) ]); // 2. Add organic visitors step. $request->getFunnel()->getSteps()[] = new FunnelStep([ 'name' => 'Organic visitors', 'filter_expression' => new FunnelFilterExpression([ 'funnel_field_filter' => new FunnelFieldFilter([ 'field_name' => 'firstUserMedium', 'string_filter' => new StringFilter([ 'match_type' => MatchType::CONTAINS, 'case_sensitive' => false, 'value' => 'organic', ]) ]) ]) ]); // 3. Add session start step. $request->getFunnel()->getSteps()[] = new FunnelStep([ 'name' => 'Session start', 'filter_expression' => new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'session_start', ]) ]) ]); // 4. Add screen/page view step. $request->getFunnel()->getSteps()[] = new FunnelStep([ 'name' => 'Screen/Page view', 'filter_expression' => new FunnelFilterExpression([ 'or_group' => new FunnelFilterExpressionList([ 'expressions' => [ new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'screen_view', ]) ]), new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'page_view' ]) ]) ] ]) ]) ]); // 5. Add purchase step. $request->getFunnel()->getSteps()[] = new FunnelStep([ 'name' => 'Purchase', 'filter_expression' => new FunnelFilterExpression([ 'or_group' => new FunnelFilterExpressionList([ 'expressions' => [ new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'purchase', ]) ]), new FunnelFilterExpression([ 'funnel_event_filter' => new FunnelEventFilter([ 'event_name' => 'in_app_purchase' ]) ]) ] ]) ]) ]); // Make an API call. $response = $client->runFunnelReport($request); printRunFunnelReportResponse($response); } /** * Print results of a runFunnelReport call. * @param RunFunnelReportResponse $response */ function printRunFunnelReportResponse(RunFunnelReportResponse $response) { print 'Report result: ' . PHP_EOL; print '=== FUNNEL VISUALIZATION ===' . PHP_EOL; printFunnelSubReport($response->getFunnelVisualization()); print '=== FUNNEL TABLE ===' . PHP_EOL; printFunnelSubReport($response->getFunnelTable()); } /** * Print the contents of a FunnelSubReport object. * @param FunnelSubReport $subReport */ function printFunnelSubReport(FunnelSubReport $subReport) { print 'Dimension headers:' . PHP_EOL; foreach ($subReport->getDimensionHeaders() as $dimensionHeader) { print $dimensionHeader->getName() . PHP_EOL; } print PHP_EOL . 'Metric headers:' . PHP_EOL; foreach ($subReport->getMetricHeaders() as $metricHeader) { print $metricHeader->getName() . PHP_EOL; } print PHP_EOL . 'Dimension and metric values for each row in the report:'; foreach ($subReport->getRows() as $rowIndex => $row) { print PHP_EOL . 'Row #' . $rowIndex . PHP_EOL; foreach ($row->getDimensionValues() as $dimIndex => $dimValue) { $dimName = $subReport->getDimensionHeaders()[$dimIndex]->getName(); print $dimName . ": '" . $dimValue->getValue() . "'" . PHP_EOL; } foreach ($row->getMetricValues() as $metricIndex => $metricValue) { $metricName = $subReport->getMetricHeaders()[$metricIndex]->getName(); print $metricName . ": '" . $metricValue->getValue() . "'" . PHP_EOL; } } print PHP_EOL . 'Sampling metadata for each date range:' . PHP_EOL; foreach($subReport->getMetadata()->getSamplingMetadatas() as $metadataIndex => $metadata) { printf('Sampling metadata for date range #%d: samplesReadCount=%d' . 'samplingSpaceSize=%d%s', $metadataIndex, $metadata->getSamplesReadCount(), $metadata->getSamplingSpaceSize(), PHP_EOL); } }
Python
from google.analytics.data_v1alpha import AlphaAnalyticsDataClient from google.analytics.data_v1alpha.types import ( DateRange, Dimension, Funnel, FunnelBreakdown, FunnelEventFilter, FunnelFieldFilter, FunnelFilterExpression, FunnelFilterExpressionList, FunnelStep, RunFunnelReportRequest, StringFilter, ) def run_sample(): """Runs the sample.""" # TODO(developer): Replace this variable with your Google Analytics 4 # property ID before running the sample. property_id = "YOUR-GA4-PROPERTY-ID" run_funnel_report(property_id) def run_funnel_report(property_id="YOUR-GA4-PROPERTY-ID"): """Runs a funnel query to build a report with 5 funnel steps. Step 1: First open/visit (event name is `first_open` or `first_visit`). Step 2: Organic visitors (`firstUserMedium` dimension contains the term "organic"). Step 3: Session start (event name is `session_start`). Step 4: Screen/Page view (event name is `screen_view` or `page_view`). Step 5: Purchase (event name is `purchase` or `in_app_purchase`). The report configuration reproduces the default funnel report provided in the Funnel Exploration template of the Google Analytics UI. See more at https://support.google.com/analytics/answer/9327974 """ client = AlphaAnalyticsDataClient() request = RunFunnelReportRequest( property=f"properties/{property_id}", date_ranges=[DateRange(start_date="30daysAgo", end_date="today")], funnel_breakdown=FunnelBreakdown( breakdown_dimension=Dimension(name="deviceCategory") ), funnel=Funnel( steps=[ FunnelStep( name="First open/visit", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_open" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="first_visit" ) ), ] ) ), ), FunnelStep( name="Organic visitors", filter_expression=FunnelFilterExpression( funnel_field_filter=FunnelFieldFilter( field_name="firstUserMedium", string_filter=StringFilter( match_type=StringFilter.MatchType.CONTAINS, case_sensitive=False, value="organic", ), ) ), ), FunnelStep( name="Session start", filter_expression=FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="session_start" ) ), ), FunnelStep( name="Screen/Page view", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="screen_view" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="page_view" ) ), ] ) ), ), FunnelStep( name="Purchase", filter_expression=FunnelFilterExpression( or_group=FunnelFilterExpressionList( expressions=[ FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="purchase" ) ), FunnelFilterExpression( funnel_event_filter=FunnelEventFilter( event_name="in_app_purchase" ) ), ] ) ), ), ] ), ) response = client.run_funnel_report(request) print_run_funnel_report_response(response) def print_funnel_sub_report(funnel_sub_report): """Prints the contents of a FunnelSubReport object.""" print("Dimension headers:") for dimension_header in funnel_sub_report.dimension_headers: print(dimension_header.name) print("\nMetric headers:") for metric_header in funnel_sub_report.metric_headers: print(metric_header.name) print("\nDimensions and metric values for each row in the report:") for row_idx, row in enumerate(funnel_sub_report.rows): print("\nRow #{}".format(row_idx)) for field_idx, dimension_value in enumerate(row.dimension_values): dimension_name = funnel_sub_report.dimension_headers[field_idx].name print("{}: '{}'".format(dimension_name, dimension_value.value)) for field_idx, metric_value in enumerate(row.metric_values): metric_name = funnel_sub_report.metric_headers[field_idx].name print("{}: '{}'".format(metric_name, metric_value.value)) print("\nSampling metadata for each date range:") for metadata_idx, metadata in enumerate( funnel_sub_report.metadata.sampling_metadatas ): print( "Sampling metadata for date range #{}: samplesReadCount={}, " "samplingSpaceSize={}".format( metadata_idx, metadata.samples_read_count, metadata.sampling_space_size ) ) def print_run_funnel_report_response(response): """Prints results of a runFunnelReport call.""" print("Report result:") print("=== FUNNEL VISUALIZATION ===") print_funnel_sub_report(response.funnel_visualization) print("=== FUNNEL TABLE ===") print_funnel_sub_report(response.funnel_table)