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 görevi tamamlarken izlediği adımları görselleştirebilmenizi ve her adımın tamamlanma durumunu hızlıca görebilmenizi sağlar.
Temel raporlarla paylaşılan özellikler
Dönüşüm hunisi raporlama istekleri, birçok ortak özellik için Core rapor istekleriyle aynı semantiğe sahiptir. Örneğin sayfalama, boyut filtreleri ve kullanıcı özellikleri, dönüşüm hunisi raporlarında temel raporlarla aynı şekilde çalışır. Bu kılavuzda, dönüşüm hunisi raporlama özelliklerine odaklanılmaktadır. Data API v1'in temel raporlama işlevi hakkında bilgi edinmek için raporlamayla ilgili temel bilgiler kılavuzunu ve gelişmiş kullanım alanları kılavuzunu okuyun.
Dönüşüm hunisi raporlama yöntemi
Data API v1, runFunnelReport yönteminde dönüşüm hunisi raporlama özelliklerini destekler. Bu yöntem, Google Analytics etkinlik verilerinizin özelleştirilmiş bir dönüşüm hunisi raporunu döndürür.
Raporlama tüzel kişisi seçme
Data API v1'in tüm yöntemleri, Google Analytics mülk tanımlayıcısının bir URL istek yolunda properties/GA_PROPERTY_ID biçiminde belirtilmesini gerektirir. Örneğin:
POST https://analyticsdata.googleapis.com/v1alpha/properties/GA_PROPERTY_ID:runFunnelReport
Sonuç raporu, belirtilen Google Analytics mülkünde toplanan Google Analytics etkinlik verilerine göre oluşturulur.
Data API istemci kitaplıklarından birini kullanıyorsanız istek URL'si yolunu manuel olarak değiştirmeniz gerekmez. Çoğu API istemcisi, properties/GA_PROPERTY_ID biçiminde bir dize bekleyen bir property parametresi sağlar. İstemci kitaplıklarını kullanma örnekleri için Hızlı başlangıç kılavuzu'na bakın.
Dönüşüm hunisi raporu isteği
Dönüşüm hunisi raporu istemek için bir RunFunnelReportRequest nesnesi oluşturabilirsiniz. Aşağıdaki istek parametreleriyle başlamanızı öneririz:
dateRangesalanında geçerli bir giriş.funnelalanında geçerli bir dönüşüm hunisi spesifikasyonu.
Dönüşüm hunisi spesifikasyonu
RunFunnelReportRequest nesnesinin funnel alanındaki dönüşüm hunisi spesifikasyonu, bu dönüşüm hunisinin steps açıklayarak ölçmek istediğiniz kullanıcı yolculuğunu tanımlar.
Dönüşüm hunisi adımları, kullanıcılarınızın dönüşüm hunisi yolculuğunun ilgili adımına dahil edilmesi için karşılaması gereken bir veya daha fazla koşul içerir. Her adıma dahil edilme koşulları, her adımın filterExpression alanında açıklanabilir.
Her dönüşüm hunisi filtresi ifadesi, iki tür filtrenin birleşimidir:
funnelFieldFilterbir boyut veya metrik için filtre oluşturur.funnelEventFiltertek bir etkinlik adıyla eşleşen etkinlikleri içeren bir filtre oluşturur. İsteğe bağlı birfunnelParameterFilterExpressionalanı belirtilirse yalnızca hem tek etkinlik adıyla hem de parametre filtre ifadeleriyle eşleşen etkinlik alt kümesi bu etkinlik filtresiyle eşleşir.
Filtreler AND, OR grupları kullanılarak birleştirilebilir ve NOT ifadesi kullanılarak olumsuzlanabilir.
Her bir dönüşüm hunisi adımının rapor sonuçları, boyuta göre ayrılır ve funnelBreakdown alanında belirtilir.
Dönüşüm hunisi raporu örneği
Aşağıdaki örnekte, Google Analytics web arayüzünün Dönüşüm hunisi keşfi şablonunda sağlanan varsayılan dönüşüm hunisi raporunu yeniden oluşturmak için Google Analytics Data API v1 kullanılmaktadır:

Dönüşüm hunisi adımları
Yukarıdaki 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 "organic" terimini içerir. |
| 3 | Oturum başlatma | Etkinlik 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ı (ilk açılış/ziyaret), bir web sitesi veya uygulamayla ilk etkileşimlerinden sonra tüm kullanıcıları (ör. first_open veya first_visit etkinliklerini tetikleyen kullanıcılar) içerir.
Bu davranışı uygulamak için aşağıdaki snippet'te filterExpression alanı olan bir FunnelStep nesnesi belirtilir.
Filtre ifadesi alanı, bir VEYA grubu kullanılarak iki FunnelEventFilter öğesinin birleştirilmesiyle oluşturulan bir FunnelFilterExpression nesnesidir.
{
"name": "Purchase",
"filterExpression": {
"orGroup": {
"expressions": [
{
"funnelEventFilter": {
"eventName": "first_open"
}
},
{
"funnelEventFilter": {
"eventName": "first_visit"
}
}
]
}
}
}
Dönüşüm hunisinin 2. adımında (Organik ziyaretçiler), ilk aracı "organik" terimini içeren kullanıcılar yer alır. Aşağıdaki snippet'te, FunnelFieldFilter öğesinin fieldName alanı, filtreye firstUserMedium boyutuyla eşleşme talimatı verir.
stringFilter alanı, yalnızca "organik" terimini içeren boyut değerlerini dahil etme koşulunu içerir.
{
"name": "Organic visitors",
"filterExpression": {
"funnelFieldFilter": {
"fieldName": "firstUserMedium",
"stringFilter": {
"matchType": "CONTAINS",
"caseSensitive": false,
"value": "organic"
}
}
}
}
Kalan dönüşüm hunisi adımları da benzer şekilde belirtilebilir.
Döküm boyutu
İsteğe bağlı bir döküm boyutu (bu örnekte deviceCategory), FunnelBreakdown nesnesi kullanılarak belirtilebilir:
"funnelBreakdown": {
"breakdownDimension": {
"name": "deviceCategory"
}
}
Varsayılan olarak, rapora yalnızca döküm boyutunun ilk 5 farklı değeri dahil edilir. Bu davranışı geçersiz kılmak için FunnelBreakdown nesnesinin limit alanını kullanabilirsiniz.
Dönüşüm hunisi raporu sorgusunu tamamlama
Dönüşüm hunisi raporu oluşturan eksiksiz bir sorgu aşağıda verilmiştir:
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 API isteğinin Dönüşüm Hunisi Raporu Yanıtı, her ikisi de FunnelSubReport nesnesi olarak döndürülen iki ana bölümden oluşur: Dönüşüm Hunisi Görselleştirmesi ve Dönüşüm Hunisi Tablosu.
Dönüşüm hunisi görselleştirme
Dönüşüm Hunisi Raporu Yanıtı'nın funnelVisualization alanında döndürülen Dönüşüm Hunisi Görselleştirmesi, dönüşüm hunisi raporuna dair üst düzey bir genel bakış içerir. Adından da anlaşılacağı üzere bu, oluşturulan dönüşüm hunisi raporunun hızlı bir şekilde görselleştirilmesi için kullanışlıdır.
Dönüşüm hunisi görselleştirme tablosunun her satırı, aşağıdaki alanların bir kısmını veya tamamını içerir:
Dönüşüm hunisi adımı adı (
funnelStepNameboyutu).Etkin kullanıcı sayısı (
activeUsersmetriği).Segment (
segmentboyut). Yalnızca dönüşüm hunisi sorgusundaSegmentbelirtilmişse gösterilir.Tarih (
dateboyutu). Yalnızca sorgudaTRENDED_FUNNELgörselleştirme türü belirtilmişse gösterilir.Sonraki işlem boyutu (
funnelStepNextActionboyutu). Yalnızca dönüşüm hunisi sorgusundaFunnelNextActionbelirtilmişse gösterilir.
Google Analytics web arayüzü, bu kılavuzdaki örnek raporun dönüşüm hunisi görselleştirme bölümünü aşağıdaki gibi gösterir:

Dönüşüm hunisi tablosu
Dönüşüm Hunisi Raporu Yanıtı'nın funnelTable alanında döndürülen Dönüşüm Hunisi Tablosu, raporun ana bölümünü temsil eder. Tablonun her satırı, aşağıdaki alanların bazılarını veya tümünü içerir:
Dönüşüm hunisi adımı adı (
funnelStepNameboyutu).Döküm boyutu.
Etkin kullanıcı sayısı (
activeUsersmetriği).Adım tamamlanma oranı (
funnelStepCompletionRatemetriği).Adım terk sayısı (
funnelStepAbandonmentsmetriği).Adım bırakma oranı (
funnelStepAbandonmentRatemetriği).Segment adı (
segmentboyutu). Yalnızca dönüşüm hunisi sorgusundaSegmentbelirtilmişse gösterilir.
Toplam değerler, döküm boyut değeri olarak RESERVED_TOTAL içeren ayrı bir satırda döndürülür.
Aşağıda, Google Analytics web arayüzünde gösterilen dönüşüm hunisi tablosuna bir örnek verilmiştir:

Ham yanıt
Aşağıdaki snippet'te, runFunnelReport sorgusuna yanıt olarak döndürülen ham veri örneği gösterilmektedir.
Mülkünüz tarafından toplanan verilere bağlı olarak örnek rapor, her bir dönüşüm hunisi adımına dahil edilen etkin kullanıcı sayısını gösteren aşağıdaki raporu döndürür.
{
"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ı
İstemci kitaplıklarının nasıl yüklenip yapılandırılacağıyla ilgili açıklama için Hızlı başlangıç kılavuzuna bakın.
Aşağıda, dönüşüm hunisi sorgusu çalıştıran ve yanıtı yazdıran istemci kitaplıklarını kullanan örnekler verilmiştir.
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)