Google Analytics 4 और BigQuery की मदद से, परफ़ॉर्मेंस को मेज़र और डीबग करना

Google Analytics 4 प्रॉपर्टी में वेब विटल्स का डेटा भेजने और BigQuery और Looker Studio में विश्लेषण के लिए डेटा एक्सपोर्ट करने का तरीका जानें.

Google कई टूल उपलब्ध कराता है—Search Console, PageSpeed के बारे में अहम जानकारी (PSI), और Chrome उपयोगकर्ता अनुभव की रिपोर्ट (CrUX). इनकी मदद से, डेवलपर यह देख सकते हैं कि उनकी साइटें, असल उपयोगकर्ताओं के लिए वेबसाइट की परफ़ॉर्मेंस की जानकारी देने वाली मेट्रिक के हिसाब से कैसा परफ़ॉर्म करती हैं.

ये टूल बहुत अच्छे हैं, क्योंकि इनसे आपको अपनी साइट की रीयल-यूज़र परफ़ॉर्मेंस का हाई-लेवल व्यू मिलता है. साथ ही, इन्हें इस्तेमाल करने के लिए किसी सेटअप की ज़रूरत नहीं होती.

हालांकि, अपनी साइट की परफ़ॉर्मेंस को मेज़र करने के लिए, सिर्फ़ इन टूल पर भरोसा नहीं किया जा सकता. इसकी कुछ अहम वजहें यहां दी गई हैं:

  • CrUX पर आधारित टूल, महीने या पिछले 28 दिनों के हिसाब से डेटा दिखाते हैं. इसका मतलब है कि कोई भी बदलाव करने के बाद, आपको नतीजे देखने के लिए लंबे समय तक इंतज़ार करना होगा.
  • CrUX पर आधारित टूल को सिर्फ़ कुछ डाइमेंशन के हिसाब से सेगमेंट किया जा सकता है. जैसे, देश, कनेक्शन टाइप, और डिवाइस कैटगरी (डेस्कटॉप या मोबाइल). अपने कारोबार के हिसाब से डाइमेंशन के हिसाब से डेटा को स्लाइस नहीं किया जा सकता. उदाहरण के लिए, दिलचस्पी दिखाने वाले उपयोगकर्ता, किसी खास प्रयोग ग्रुप के उपयोगकर्ता वगैरह.
  • CrUX पर आधारित टूल से आपको यह पता चल सकता है कि आपकी परफ़ॉर्मेंस कैसी है. हालांकि, इनसे यह पता नहीं चलता कि परफ़ॉर्मेंस कैसे है. आंकड़ों के टूल की मदद से, ज़्यादा डेटा भेजा जा सकता है, ताकि समस्याओं को ट्रैक करने और डीबग करने में मदद मिल सके.

इन वजहों से, हमारा सुझाव है कि सभी साइट के मालिक अपने मौजूदा ऐनलिटिक्स टूल का इस्तेमाल करके, वेबसाइट की परफ़ॉर्मेंस की जानकारी देने वाली मेट्रिक पर नज़र रखें. इस पोस्ट में बताया गया है कि Google के मुफ़्त टूल का इस्तेमाल करके, ऐसा कैसे किया जा सकता है.

सब कुछ सेट अप करने के बाद, इस तरह के डैशबोर्ड बनाए जा सकते हैं:

Web Vitals कनेक्टर रिपोर्ट का स्क्रीनशॉट

Web Vitals कनेक्टर रिपोर्ट का स्क्रीनशॉट

अगर आपको यहां बताए गए सभी चरणों की विज़ुअल खास जानकारी चाहिए, तो Google I/O '21 में हमारी बातचीत देखें:

मापें

Google Analytics में कस्टम मेट्रिक का इस्तेमाल करके, परफ़ॉर्मेंस को हमेशा मेज़र किया जा सकता है. हालांकि, Google Analytics 4 (GA4) में कुछ नई सुविधाएं हैं जिनके बारे में डेवलपर को खास तौर पर जानना चाहिए.

  • ज़ीरो-कॉन्फ़िगरेशन, कस्टम इवेंट पैरामीटर
  • बिना किसी शुल्क के BigQuery एक्सपोर्ट की सुविधा, ताकि आप एसक्यूएल का इस्तेमाल करके अपने डेटा पर क्वेरी चला सकें

Google Analytics के वेब इंटरफ़ेस में विश्लेषण के बेहतरीन टूल मौजूद हैं. हालांकि, ऐसी क्वेरी भाषा का इस्तेमाल करके रॉ इवेंट डेटा को ऐक्सेस करने की सुविधा और उसके फ़ायदों को मात देना मुश्किल है जो आपको पहले से पता हो.

Google Analytics 4 और BigQuery का इस्तेमाल करके, वेबसाइट की परफ़ॉर्मेंस की अहम जानकारी देने वाली मेट्रिक को मेज़र करने के लिए, आपको ये तीन काम करने होंगे:

  1. Google Analytics 4 प्रॉपर्टी और BigQuery प्रोजेक्ट बनाएं.
  2. अपनी Google Analytics प्रॉपर्टी के कॉन्फ़िगरेशन में, BigQuery एक्सपोर्ट की सुविधा चालू करें. इससे, आपको मिलने वाला सारा डेटा, BigQuery प्रोजेक्ट टेबल में अपने-आप भर जाएगा.
  3. अपनी साइट में वेब-विटल्स JavaScript लाइब्रेरी जोड़ें, ताकि आप मुख्य वेब विटल्स मेट्रिक को मेज़र कर सकें और एट्रिब्यूशन डेटा के साथ-साथ Google Analytics 4 को डेटा भेज सकें.

विश्लेषण करें

सेट अप पूरा होने के बाद, आपको BigQuery इंटरफ़ेस में इवेंट डेटा दिखेगा. साथ ही, इस डेटा के लिए इस तरह क्वेरी की जा सकती है:

SELECT * FROM `my_project_id.analytics_XXXXX.events_*`
WHERE event_name IN ('LCP', 'INP', 'CLS')

यहां उस क्वेरी के नतीजों की झलक दी गई है:

BigQuery में वेब विटल्स इवेंट का डेटा

वेबसाइट की परफ़ॉर्मेंस की अहम जानकारी वाले डेटा के बारे में क्वेरी करना

वेब विटल्स इवेंट डेटा के बारे में क्वेरी करने से पहले, यह समझना ज़रूरी है कि डेटा को कैसे इकट्ठा किया जाता है.

सबसे अहम बात यह समझना है कि कुछ मामलों में, एक ही पेज पर एक ही मेट्रिक के लिए एक से ज़्यादा इवेंट मिल सकते हैं. ऐसा तब हो सकता है, जब मेट्रिक की वैल्यू बदल जाए और अपडेट की गई वैल्यू रिपोर्ट की जाए. आम तौर पर, सीएलएस के साथ ऐसा होता है.

वेबसाइट की परफ़ॉर्मेंस की अहम जानकारी देने वाले इवेंट के लिए, भेजी गई आखिरी वैल्यू हमेशा सबसे सटीक होती है. इसलिए, कोई भी विश्लेषण करने से पहले, सिर्फ़ उन वैल्यू को फ़िल्टर करना ज़रूरी है. Google Analytics 4 को डेटा भेजने के लिए, web-vitals JavaScript लाइब्रेरी से मिले कोड स्निपेट में हर मेट्रिक के लिए एक यूनीक आईडी भेजना शामिल है. इसलिए, हर मेट्रिक आईडी के लिए, सिर्फ़ आखिरी बार मिली वैल्यू पर अपने नतीजों को सीमित करने के लिए, यहां दी गई क्वेरी का इस्तेमाल किया जा सकता है:

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)

ध्यान दें कि इस पोस्ट में बताई गई अन्य सभी क्वेरी, इस सबक्वेरी से शुरू होंगी.

क्वेरी के उदाहरण

अगले कुछ सेक्शन में, वेब विटल्स की सामान्य क्वेरी के कुछ उदाहरण दिए गए हैं. हो सकता है कि आप इन्हें चलाना चाहें.

पूरी साइट पर एलसीपी, आईएनपी, और सीएलएस का 75% पर्सेंटाइल (p75)

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  metric_name,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS p75,
  COUNT(1) as count
FROM (
  SELECT
    metric_name,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
)
GROUP BY 1

सबसे ज़्यादा से सबसे कम तक सभी अलग-अलग एलसीपी वैल्यू

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
FROM web_vitals_events
WHERE metric_name = 'LCP'
ORDER BY metric_value DESC
# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS LCP,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
  WHERE metric_name = 'LCP'
)
GROUP BY 1
ORDER BY count DESC
LIMIT 10

सबसे खराब सीएलएस (p75) वाले टॉप 10 पेज

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
  FROM web_vitals_events
  WHERE metric_name = 'CLS'
)
GROUP BY 1
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC
LIMIT 10

डीबग

पिछली क्वेरी से, वेबसाइट की परफ़ॉर्मेंस से जुड़ी अहम जानकारी वाली मेट्रिक के डेटा को क्वेरी करने का तरीका पता चलता है. इससे आपको अपनी मौजूदा परफ़ॉर्मेंस और समय के साथ उसमें होने वाले बदलावों को समझने में मदद मिलती है. अगर आपकी परफ़ॉर्मेंस उम्मीद से खराब है, लेकिन आपको इसकी वजह पता नहीं है, तो क्या करें?

अगर आपके पास समस्याओं को ठीक करने के लिए कार्रवाई करने का विकल्प नहीं है, तो अपने स्कोर के बारे में जानना काम का नहीं है.

फ़ील्ड में परफ़ॉर्मेंस डीबग करना लेख में बताया गया है कि अपने Analytics डेटा के साथ, डीबग से जुड़ी अतिरिक्त जानकारी कैसे भेजी जा सकती है. अगर उस पोस्ट में दिए गए निर्देशों का पालन किया जाता है, तो आपको BigQuery में भी डीबग की जानकारी दिखेगी.

क्वेरी के उदाहरण

यहां दी गई क्वेरी से पता चलता है कि परफ़ॉर्मेंस से जुड़ी समस्याओं की मूल वजह का पता लगाने के लिए, debug_target इवेंट पैरामीटर का इस्तेमाल कैसे किया जा सकता है.

सीएलएस में योगदान देने वाले टॉप एलिमेंट

debug_target एक सीएसएस सिलेक्टर स्ट्रिंग है, जो पेज पर मौजूद उस एलिमेंट से जुड़ी होती है जो मेट्रिक वैल्यू के हिसाब से सबसे ज़्यादा काम का होता है.

सीएलएस के साथ, debug_target सबसे बड़े लेआउट शिफ़्ट के सबसे बड़े एलिमेंट को दिखाता है, जिसने सीएलएस वैल्यू में योगदान दिया है. अगर कोई एलिमेंट नहीं शिफ़्ट हुआ है, तो debug_target की वैल्यू null होगी.

नीचे दी गई क्वेरी, 75वें प्रतिशत में पेजों के सीएलएस के हिसाब से, सबसे खराब से सबसे अच्छे तक की सूची दिखाएगी. साथ ही, पेजों को debug_target के हिसाब से ग्रुप किया जाएगा:

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path,
  debug_target,
  APPROX_QUANTILES(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT(1) as count
FROM (
  SELECT
    REGEXP_SUBSTR((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = "debug_target") as debug_target,
    ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
    *
  FROM web_vitals_events
  WHERE metric_name = 'CLS'
)
GROUP BY 1, 2
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC

सीएलएस में योगदान देने वाले टॉप एलिमेंट के लिए क्वेरी का नतीजा

पेज पर कौनसे एलिमेंट शिफ़्ट हो रहे हैं, यह जानने से समस्या की असल वजह का पता लगाना और उसे ठीक करना आसान हो जाता है.

ध्यान रखें कि यहां रिपोर्ट किए गए एलिमेंट, शायद वे एलिमेंट न हों जो आपको अपने पेजों को स्थानीय तौर पर डीबग करते समय बदलते हुए दिखते हैं. इसलिए, सबसे पहले इस डेटा को कैप्चर करना ज़रूरी है. उन समस्याओं को ठीक करना बहुत मुश्किल होता है जिनके बारे में आपको पता ही नहीं होता!

अन्य मेट्रिक डीबग करना

पिछली क्वेरी में सीएलएस मेट्रिक के नतीजे दिखते हैं. हालांकि, एलसीपी और आईएनपी के लिए डीबग टारगेट की रिपोर्ट करने के लिए, इसी तकनीक का इस्तेमाल किया जा सकता है. डीबग करने के लिए, जहां क्लॉज़ को काम की मेट्रिक से बदलें:

WHERE metric_name = 'INP'
WHERE metric_name = 'LCP'

वेबसाइट की परफ़ॉर्मेंस की अहम जानकारी देने वाली हर मेट्रिक के लिए, डीबग की जानकारी इकट्ठा करने और भेजने का तरीका जानने के लिए, फ़ील्ड में परफ़ॉर्मेंस डीबग करना लेख पढ़ें.

विज़ुअलाइज़ करना

सिर्फ़ क्वेरी के नतीजों को देखकर अहम जानकारी हासिल करना मुश्किल हो सकता है. उदाहरण के लिए, नीचे दी गई क्वेरी में डेटासेट में, हर दिन के लिए LCP की 75वीं पर्सेंटाइल वैल्यू दी गई हैं.

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
  SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
    SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
      ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
    ) = 1, true, false) AS is_last_received_value
    FROM `bigquery_project_id.analytics_XXXXX.events_*`
    WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  ) WHERE is_last_received_value
)
# Main query logic
SELECT
  event_date,
  metric_name,
  APPROX_QUANTILES(ROUND(metric_value, 2), 100)[OFFSET(75)] AS p75
FROM
  (
    SELECT
      event_date,
      metric_name,
      ROUND((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value'), 3) AS metric_value
    FROM web_vitals_events
    WHERE
      metric_name = 'LCP'
  )
GROUP BY
  1, 2
ORDER BY event_date

क्वेरी के इन नतीजों से, सिर्फ़ डेटा को देखकर रुझानों या आउटलायर की पहचान करना मुश्किल होता है.

हर दिन की मेट्रिक वैल्यू की क्वेरी के नतीजे

ऐसे मामलों में, डेटा को विज़ुअलाइज़ करने से, आपको अहम जानकारी ज़्यादा तेज़ी से मिल सकती है.

Looker Studio में क्वेरी के नतीजे विज़ुअलाइज़ करना

BigQuery, Data Studio की मदद से किसी भी क्वेरी के नतीजों को तुरंत विज़ुअलाइज़ करने का तरीका उपलब्ध कराता है. Looker Studio, डेटा विज़ुअलाइज़ेशन और डैशबोर्डिंग टूल है. इसका इस्तेमाल बिना किसी शुल्क के किया जा सकता है. अपनी क्वेरी के नतीजों को विज़ुअलाइज़ करने के लिए, BigQuery यूज़र इंटरफ़ेस (यूआई) में क्वेरी चलाने के बाद, डेटा एक्सप्लोर करें बटन पर क्लिक करें. इसके बाद, Looker Studio की मदद से एक्सप्लोर करें को चुनें.

BigQuery में Looker Studio के विकल्प की मदद से एक्सप्लोर करना

इससे, 'एक्सप्लोर करें' व्यू में, BigQuery से Looker Studio में सीधा लिंक बन जाएगा. इस व्यू में, आपको जिन फ़ील्ड को विज़ुअलाइज़ करना है उन्हें चुना जा सकता है. साथ ही, चार्ट के टाइप चुने जा सकते हैं, फ़िल्टर सेट अप किए जा सकते हैं, और तुरंत विज़ुअल विश्लेषण के लिए, ऐड-हॉक चार्ट बनाए जा सकते हैं. क्वेरी के पिछले नतीजों से, समय के साथ LCP वैल्यू का रुझान देखने के लिए, यह लाइन चार्ट बनाया जा सकता है:

Looker Studio में, हर दिन के LCP की वैल्यू का लाइन चार्ट

BigQuery और Looker Studio के बीच के इस डायरेक्ट लिंक की मदद से, अपनी किसी भी क्वेरी से तुरंत चार्ट बनाए जा सकते हैं और विज़ुअल विश्लेषण किया जा सकता है. हालांकि, अगर आपको ज़्यादा विश्लेषण करना है, तो हो सकता है कि आप इंटरैक्टिव डैशबोर्ड में कई चार्ट देखना चाहें. इससे आपको ज़्यादा बेहतर नज़रिए से डेटा देखने या उसमें ड्रिल-डाउन करने में मदद मिलेगी. आसानी से इस्तेमाल होने वाले डैशबोर्ड का मतलब है कि आपको हर बार अपनी मेट्रिक का विश्लेषण करने के लिए, क्वेरी लिखने और मैन्युअल तरीके से चार्ट जनरेट करने की ज़रूरत नहीं है.

नेटिव BigQuery कनेक्टर का इस्तेमाल करके, Looker Studio में डैशबोर्ड बनाया जा सकता है. ऐसा करने के लिए, datastudio.google.com पर जाएं. इसके बाद, नया डेटा सोर्स बनाएं और BigQuery कनेक्टर चुनें. इसके बाद, वह डेटासेट चुनें जिस पर आपको काम करना है:

Looker Studio में BigQuery नेटिव कनेक्टर का इस्तेमाल करना

वेबसाइट की परफ़ॉर्मेंस के बारे में अहम जानकारी का डेटा दिखाना

जैसा कि पहले बताया गया है, वेबसाइट की परफ़ॉर्मेंस की जानकारी देने वाले इवेंट डेटा के डैशबोर्ड बनाते समय, Google Analytics 4 के एक्सपोर्ट किए गए डेटासेट का सीधे तौर पर इस्तेमाल करना कारगर नहीं होता. GA4 डेटा के स्ट्रक्चर और वेब विटल मेट्रिक के लिए ज़रूरी प्रीप्रोसेसिंग की वजह से, आपकी क्वेरी के कुछ हिस्से कई बार चलेंगे. इससे दो समस्याएं आती हैं: डैशबोर्ड की परफ़ॉर्मेंस और BigQuery की लागत.

BigQuery सैंडबॉक्स मोड का इस्तेमाल बिना किसी शुल्क के किया जा सकता है. BigQuery के बिना शुल्क के इस्तेमाल करने की सुविधा वाले टीयर में, हर महीने क्वेरी के लिए प्रोसेस किए जाने वाले पहले 1 टीबी डेटा पर कोई शुल्क नहीं लिया जाता. इस पोस्ट में बताए गए विश्लेषण के तरीकों के लिए, अगर बहुत बड़े डेटासेट का इस्तेमाल नहीं किया जा रहा है या डेटासेट से नियमित तौर पर ज़्यादा क्वेरी नहीं की जा रही है, तो हर महीने बिना किसी शुल्क के इस्तेमाल की सीमा के अंदर ही काम किया जा सकता है. हालांकि, अगर आपकी वेबसाइट पर बहुत ज़्यादा ट्रैफ़िक आता है और आपको तेज़ी से काम करने वाले इंटरैक्टिव डैशबोर्ड का इस्तेमाल करके, अलग-अलग मेट्रिक को नियमित तौर पर मॉनिटर करना है, तो हमारा सुझाव है कि आप अपने वेब की ज़रूरी जानकारी वाले डेटा को पहले से प्रोसेस करें और उसे मेटालाइज़ करें. साथ ही, BigQuery की परफ़ॉर्मेंस को बेहतर बनाने वाली सुविधाओं का इस्तेमाल करें. जैसे, पार्टिशनिंग, क्लस्टरिंग, और कैश मेमोरी.

यहां दी गई स्क्रिप्ट, आपके BigQuery डेटा (सोर्स टेबल) को प्रीप्रोसेस करेगी और एक मेटालाइज़ की गई टेबल (टारगेट टेबल) बनाएगी. अपने डेटासेट के लिए इस क्वेरी का इस्तेमाल करते समय, हो सकता है कि आप सोर्स टेबल के लिए तारीख की सीमा तय करना चाहें, ताकि प्रोसेस किए जाने वाले डेटा की संख्या कम हो सके.

# Materialize Web Vitals metrics from GA4 event export data

# Replace target table name
CREATE OR REPLACE TABLE bigquery_project_id.ga4_demo_dev.web_vitals_summary
  PARTITION BY DATE(event_timestamp)
  CLUSTER BY metric_name
AS
SELECT
  ga_session_id,
  IF(
    EXISTS(SELECT 1 FROM UNNEST(events) AS e WHERE e.event_name = 'first_visit'),
    'New user',
    'Returning user') AS user_type,
  IF(
    (SELECT MAX(session_engaged) FROM UNNEST(events)) > 0, 'Engaged', 'Not engaged')
    AS session_engagement,
  evt.* EXCEPT (session_engaged, event_name),
  event_name AS metric_name,
  FORMAT_TIMESTAMP('%Y%m%d', event_timestamp) AS event_date
FROM
  (
    SELECT
      ga_session_id,
      ARRAY_AGG(custom_event) AS events
    FROM
      (
        SELECT
          ga_session_id,
          STRUCT(
            country,
            device_category,
            device_os,
            traffic_medium,
            traffic_name,
            traffic_source,
            page_path,
            debug_target,
            event_timestamp,
            event_name,
            metric_id,
            IF(event_name = 'LCP', metric_value / 1000, metric_value) AS metric_value,
            user_pseudo_id,
            session_engaged,
            session_revenue) AS custom_event
        FROM
          (
            SELECT
              (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
                AS ga_session_id,
              (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
                AS metric_id,
              ANY_VALUE(device.category) AS device_category,
              ANY_VALUE(device.operating_system) AS device_os,
              ANY_VALUE(traffic_source.medium) AS traffic_medium,
              ANY_VALUE(traffic_source.name) AS traffic_name,
              ANY_VALUE(traffic_source.source) AS traffic_source,
              ANY_VALUE(
                REGEXP_SUBSTR(
                  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
                  r'^[^?]+')) AS page_path,
              ANY_VALUE(
                (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'debug_target'))
                AS debug_target,
              ANY_VALUE(user_pseudo_id) AS user_pseudo_id,
              ANY_VALUE(geo.country) AS country,
              ANY_VALUE(event_name) AS event_name,
              SUM(ecommerce.purchase_revenue) AS session_revenue,
              MAX(
                (
                  SELECT
                    COALESCE(
                      value.double_value, value.int_value, CAST(value.string_value AS NUMERIC))
                  FROM UNNEST(event_params)
                  WHERE key = 'session_engaged'
                )) AS session_engaged,
              TIMESTAMP_MICROS(MAX(event_timestamp)) AS event_timestamp,
              MAX(
                (
                  SELECT COALESCE(value.double_value, value.int_value)
                  FROM UNNEST(event_params)
                  WHERE key = 'metric_value'
                )) AS metric_value,
            FROM
              # Replace source table name
              `bigquery_project_id.analytics_XXXXX.events_*`
            WHERE
              event_name IN ('LCP', 'INP', 'CLS', 'first_visit', 'purchase')
            GROUP BY
              1, 2
          )
      )
    WHERE
      ga_session_id IS NOT NULL
    GROUP BY ga_session_id
  )
CROSS JOIN UNNEST(events) AS evt
WHERE evt.event_name NOT IN ('first_visit', 'purchase');

मेटालाइज़ किए गए इस डेटासेट के कई फ़ायदे हैं:

  • डेटा स्ट्रक्चर को फ़्लैट किया गया है और उस पर क्वेरी करना आसान है.
  • यह ओरिजनल GA4 डेटासेट से सिर्फ़ वेब विटल्स इवेंट को बनाए रखता है.
  • सेशन आईडी, उपयोगकर्ता टाइप (नया बनाम लौटने वाला), और सेशन में यूज़र ऐक्टिविटी की जानकारी, कॉलम में सीधे तौर पर उपलब्ध होती है.
  • टेबल को तारीख के हिसाब से पार्टिशन किया गया है और मेट्रिक के नाम के हिसाब से क्लस्टर किया गया है. इससे आम तौर पर, हर क्वेरी के लिए प्रोसेस किए जाने वाले डेटा की संख्या कम हो जाती है.
  • इस टेबल में क्वेरी करने के लिए, आपको वाइल्डकार्ड का इस्तेमाल करने की ज़रूरत नहीं होती. इसलिए, क्वेरी के नतीजे 24 घंटे तक कैश मेमोरी में सेव रह सकते हैं. इससे, एक ही क्वेरी को दोहराने की लागत कम हो जाती है.
  • BigQuery BI इंजन का इस्तेमाल करने पर, इस टेबल पर ऑप्टिमाइज़ किए गए एसक्यूएल फ़ंक्शन और ऑपरेटर चलाए जा सकते हैं.

BigQuery यूज़र इंटरफ़ेस (यूआई) में जाकर, इस मेटालाइज़ की गई टेबल के लिए सीधे क्वेरी की जा सकती है. इसके अलावा, BigQuery कनेक्टर का इस्तेमाल करके, Looker Studio में भी इसका इस्तेमाल किया जा सकता है.

वेबसाइट की परफ़ॉर्मेंस के बारे में अहम जानकारी देने वाले कनेक्टर का इस्तेमाल करना

डैशबोर्ड को शुरू से बनाने में काफ़ी समय लगता है. इसलिए, हमने एक पैकेज वाला समाधान तैयार किया है. इससे, आपके लिए डैशबोर्ड का टेंप्लेट बन जाएगा. सबसे पहले, पक्का करें कि आपने पिछली क्वेरी का इस्तेमाल करके, वेबसाइट की परफ़ॉर्मेंस की जानकारी देने वाली टेबल को मटीरियलाइज़ कर लिया है. इसके बाद, इस लिंक का इस्तेमाल करके Looker Studio के लिए वेब विटल्स कनेक्टर ऐक्सेस करें: goo.gle/web-vitals-connector

एक बार की अनुमति देने के बाद, आपको यह कॉन्फ़िगरेशन स्क्रीन दिखेगी:

वेब विटल्स कनेक्टर की अनुमति देने वाली स्क्रीन

मटीरियलाइज़ की गई BigQuery टेबल का आईडी (यानी टारगेट टेबल) और अपना BigQuery बिलिंग प्रोजेक्ट आईडी दें. कनेक्ट करें पर क्लिक करने के बाद, Looker Studio एक नया टेंप्लेट डैशबोर्ड बनाएगा और आपके डेटा को उससे जोड़ देगा. डैशबोर्ड में अपनी पसंद के मुताबिक बदलाव किए जा सकते हैं, उसे शेयर किया जा सकता है, और उसमें बदलाव किया जा सकता है. अगर आपने एक बार डैशबोर्ड बना लिया है, तो आपको कनेक्टर लिंक पर फिर से जाने की ज़रूरत नहीं है. ऐसा तब तक नहीं करना होगा, जब तक आपको अलग-अलग डेटासेट से कई डैशबोर्ड बनाने हों.

डैशबोर्ड पर नेविगेट करने पर, आपको खास जानकारी टैब में, वेब विटल्स मेट्रिक के रोज़ के रुझान और अपनी वेबसाइट के इस्तेमाल से जुड़ी कुछ जानकारी दिख सकती है. जैसे, उपयोगकर्ता और सेशन.

उपयोगकर्ता का विश्लेषण टैब में, कोई मेट्रिक चुनें. इसके बाद, मेट्रिक के प्रतिशत के साथ-साथ, अलग-अलग इस्तेमाल और कारोबार की मेट्रिक के हिसाब से उपयोगकर्ता की संख्या का ब्रेकडाउन पाएं.

पेज पाथ का विश्लेषण टैब की मदद से, अपनी वेबसाइट पर समस्या वाले हिस्सों की पहचान की जा सकती है. यहां खास जानकारी देखने के लिए, कोई मेट्रिक चुनें. हालांकि, आपको सभी पेज पाथ का स्कैटर-मैप भी दिखता है. इसमें y-ऐक्सिस पर प्रतिशत वैल्यू और x-ऐक्सिस पर रिकॉर्ड की संख्या होती है. स्कैटर मैप की मदद से, उन पेजों की पहचान की जा सकती है जिनकी मेट्रिक वैल्यू, उम्मीद से कम है. पेज पाथ टेबल के स्कैटर चार्ट का इस्तेमाल करके पेज चुनने के बाद, डीबग टारगेट टेबल को देखकर, समस्या वाले हिस्से को ज़्यादा बारीकी से देखा जा सकता है.

रेवेन्यू का विश्लेषण टैब एक उदाहरण है, जिससे पता चलता है कि एक ही जगह पर अपने कारोबार और परफ़ॉर्मेंस मेट्रिक को कैसे मॉनिटर किया जा सकता है. यह सेक्शन उन सभी सेशन को प्लॉट करता है जिनमें उपयोगकर्ता ने खरीदारी की. किसी सेशन के दौरान, उपयोगकर्ता अनुभव के मुकाबले मिले रेवेन्यू की तुलना की जा सकती है .

बेहतर इस्तेमाल के लिए

डेटासेट के बारे में ज़्यादा जानने के बाद, डैशबोर्ड में बदलाव किया जा सकता है. साथ ही, बेहतर और टारगेट किए गए विश्लेषण के लिए, अपने चार्ट जोड़े जा सकते हैं. डैशबोर्ड को ज़्यादा काम का बनाने के लिए, यह तरीका अपनाएं:

  • अपडेट किया गया डेटा पाने के लिए, BigQuery में शेड्यूल की गई क्वेरी सेट अप करें. हमने पहले जो मेटालाइज़ेशन क्वेरी चलाई थी वह सिर्फ़ उस समय आपके डेटा का स्नैपशॉट लेती है. अगर आपको अपने डैशबोर्ड को नए डेटा के साथ अपडेट रखना है, तो शेड्यूल की गई एक क्वेरी चलाएं. यह क्वेरी हर दिन चलेगी और आपकी मेटालाइज़ की गई टेबल में नए डेटा को जोड़ देगी.
  • कारोबार की अहम जानकारी के लिए, पहले पक्ष (ग्राहक) के डेटा (जैसे, सीआरएम) को जोड़ें. मेटालाइज़ की गई टेबल में, user_id को अलग कॉलम के तौर पर जोड़ा जा सकता है. इससे आपको अपने पहले पक्ष के डेटा को जोड़ने में मदद मिलेगी. अगर आपका फ़र्स्ट पार्टी डेटा पहले से BigQuery में मौजूद नहीं है, तो डेटा लोड करें या फ़ेडरेटेड डेटा सोर्स का इस्तेमाल करें.
  • Google Analytics को भेजे जाने वाले डेटा में, अपनी साइट या ऐप्लिकेशन के वर्शन को पैरामीटर के तौर पर रिपोर्ट करें. साथ ही, इसे मेटालाइज़ की गई टेबल में कॉलम के तौर पर जोड़ें. इसके बाद, उस वर्शन के डेटा को अपने चार्ट में डाइमेंशन के तौर पर जोड़ा जा सकता है, ताकि यह देखा जा सके कि वर्शन में हुए बदलावों का परफ़ॉर्मेंस पर क्या असर पड़ा.
  • अगर आपको सीधे क्वेरी या डैशबोर्ड के ज़रिए डेटासेट का ज़्यादा इस्तेमाल करना है, तो BigQuery बीआई इंजन के पैसे चुकाकर मिलने वाले वर्शन का इस्तेमाल करें.

खास जानकारी

इस पोस्ट में, Google Analytics 4 और BigQuery का इस्तेमाल करने के बुनियादी तरीकों के बारे में बताया गया है. इनकी मदद से, फ़ील्ड में इकट्ठा किए गए असल उपयोगकर्ता के डेटा से परफ़ॉर्मेंस को मेज़र और डीबग किया जा सकता है. इसमें, Looker Studio और वेब विटल्स कनेक्टर का इस्तेमाल करके, अपने-आप जनरेट होने वाली रिपोर्ट और डैशबोर्ड बनाने का तरीका भी बताया गया है. इससे, डेटा को आसानी से विज़ुअलाइज़ किया जा सकता है.

इस पोस्ट से मिली अहम जानकारी:

  • असल उपयोगकर्ता के डेटा की मदद से परफ़ॉर्मेंस को मेज़र करना, अपनी साइट को समझने, डिबग करने, और ऑप्टिमाइज़ करने के लिए ज़रूरी है.
  • जब आपकी परफ़ॉर्मेंस मेट्रिक और कारोबार की मेट्रिक एक ही सिस्टम में होती हैं, तो आपको ज़्यादा अहम जानकारी मिल सकती है. Google Analytics और BigQuery की मदद से, ऐसा किया जा सकता है.
  • Google Analytics के रॉ डेटा को BigQuery में एक्सपोर्ट करने से, आपको ज़्यादा जानकारी वाले कस्टम विश्लेषण की असीमित संभावनाएं मिलती हैं. इसके लिए, ऐसी क्वेरी लैंग्वेज का इस्तेमाल किया जाता है जो शायद आपको पहले से पता हो.
  • Google के पास Looker Studio जैसे कई एपीआई और विज़ुअलाइज़ेशन टूल हैं. इनकी मदद से, अपनी रिपोर्ट को अपनी पसंद के मुताबिक बनाया जा सकता है.