2017-07-26 6 views
0

BigQueryを使用してGAファンネル(Google360でカスタムレポート)を再作成しようとしています。 GAの目標到達プロセスでは、各ページで発生するユニークなイベント数が使用されています。私はほとんどの部分のために働いて、このクエリオンラインが見つかりました:BigQueryでGAファンネルを再作成

SELECT 
    COUNT(s0.firstHit) AS Landing_Page, 
    COUNT(s1.firstHit) AS Model_Selection 
from(
SELECT 
     s0.fullvisitorID, 
     s0.firstHit, 
     s1.firstHit, 
    FROM (
      # Begin Subquery #1 aka s0 
      SELECT 
        fullvisitorID, 
        MIN(hits.hitNumber) AS firstHit 
      FROm [64269470.ga_sessions_20170720] 
      WHERE 
        hits.eventInfo.eventAction in ('landing_page') 
        AND totals.visits = 1 
      GROUP BY 
        fullvisitorID 
       ) s0 
    # End Subquery #1 aka s0 

    left join (

    # Begin Subquery #2 aka s1 
      SELECT 
       fullvisitorID, 
       MIN(hits.hitNumber) AS firstHit 
      FROM [64269470.ga_sessions_20170720] 
      WHERE 
      hits.eventInfo.eventAction in ('model_selection_page') 
      AND totals.visits = 1 
      GROUP BY 
       fullvisitorID, 
       ) s1 

     ON 
    s0.fullvisitorID = s1.fullvisitorID 

    ) 

クエリが正常に動作し、ランディングページの値が、私はGAに得ることができるものと同じですが、Model_Selectionは約10%高いです。この差はまた、漏斗に沿って増加します(わかりやすくするために2つのステップしか掲載していません)。 私はここで何が不足していると思いますか?

答えて

1

このクエリでは、何が必要ありませんが、Standard SQLバージョンで:

#standardSQL 
SELECT 
    SUM((SELECT COUNTIF(eventInfo.eventAction = 'landing_page') FROM UNNEST(hits))) Landing_Page, 
    SUM((SELECT COUNTIF(eventInfo.eventAction = 'model_selection_page') FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page'))) Model_Selection 
FROM `64269470.ga_sessions_20170720` 

ちょうどその。 4つのライン、方法高速かつ安価。

あなたはまた、シミュレートされたデータを再生することができます

、何かのように:あなたは少なくとも一度解雇していた訪問者を選択する必要があるとして、GAにこのタイプのレポートを構築することは、もう少し難しいかもしれないことを

#standardSQL 
WITH data AS(
    SELECT '1' AS fullvisitorid, ARRAY<STRUCT<eventInfo STRUCT<eventAction STRING > >> [STRUCT(STRUCT('landing_page' AS eventAction) AS eventInfo)] AS hits UNION ALL 
    SELECT '1' AS fullvisitorid, ARRAY<STRUCT<eventInfo STRUCT<eventAction STRING > >> [STRUCT(STRUCT('landing_page' AS eventAction) AS eventInfo), STRUCT(STRUCT('landing_page' AS eventAction) AS eventInfo)] AS hits UNION ALL 
    SELECT '1' AS fullvisitorid, ARRAY<STRUCT<eventInfo STRUCT<eventAction STRING > >> [STRUCT(STRUCT('landing_page' AS eventAction) AS eventInfo), STRUCT(STRUCT('model_selection_page' AS eventAction) AS eventInfo)] AS hits UNION ALL 
    SELECT '1' AS fullvisitorid, ARRAY<STRUCT<eventInfo STRUCT<eventAction STRING > >> [STRUCT(STRUCT('model_selection_page' AS eventAction) AS eventInfo), STRUCT(STRUCT('model_selection_page' AS eventAction) AS eventInfo)] AS hits 
) 

SELECT 
    SUM((SELECT COUNTIF(eventInfo.eventAction = 'landing_page') FROM UNNEST(hits))) Landing_Page, 
    SUM((SELECT COUNTIF(eventInfo.eventAction = 'model_selection_page') FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page'))) Model_Selection 
FROM data 

お知らせイベント 'landing_page'を呼び出し、イベント 'model_selection_page'を発生させました。このレポートがGAで正しく作成されていることを確認してください(「landing_page」が発生した顧客のみでカスタマイズされたレポートを作成してから、「model_selection_page」を検索する2番目のフィルタを適用することもできます)。

は、[EDIT]:

あなたは、セッションおよびユーザーレベルでこのカウントをもたらすことについてのあなたのコメントに尋ねました。各セッションをカウントするため、あなたは各サブクエリ評価のための1に結果を制限することができ、そのよう:個別のユーザーをカウントするための

SELECT 
    SUM((SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page' LIMIT 1)) Landing_Page, 
    SUM((SELECT 1 FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page') AND eventInfo.eventAction = 'model_selection_page' LIMIT 1)) Model_Selection 
FROM data 

、考え方は同じですが、COUNT(DISTINCT)操作を適用する必要があるだろう、ように:

SELECT 
    COUNT(DISTINCT(SELECT fullvisitorid FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page' LIMIT 1)) Landing_Page, 
    COUNT(DISTINCT(SELECT fullvisitorid FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE eventInfo.eventAction = 'landing_page') AND eventInfo.eventAction = 'model_selection_page' LIMIT 1)) Model_Selection 
FROM data 
+0

こんにちはウィリアン、あなたの答えをありがとう。あなたが使っている面白いアプローチです。しかし、クイック質問。この構造を使って、ユーザーとセッションを区別してください。それは、カウントされているものがその場合の合計イベントであるように見えます。 ありがとう! – Jacob

+0

@Jacobこれを参照している別の質問のおかげで、私はあなたのコメントを見つけました。私は私の答えを編集した、うまくいけば、これはあなたが探しているものです。それが動作するかどうか私に教えてください:) –

関連する問題