2017-05-11 4 views
1

Ich bin importiert GA-Daten unter Verwendung der durchschnittlichen Produktposition auf einer Seite zu berechnen, ich momentan dies durch SKU durch Mitteln der Artikel Position tue - ist es eine Möglichkeit, in meiner Abfrage dies als gewichteter Durchschnitt zu berechnen als Produkt 10-mal in der Position 1, angezeigt werden konnte und einmal an der Position 10, würde ich nicht die durchschnittliche will 5.Weighted Average in BigQuery

Hier zu sein ist meine Abfrage so weit:

SELECT hits.product.productSKU AS SKU, AVG(hits.product.productListPosition) AS Average_Position 
FROM (TABLE_DATE_RANGE([***.ga_sessions_], TIMESTAMP('2016-04-24'), TIMESTAMP('2016-04-30'))) 
GROUP BY SKU 
ORDER BY Average_Position ASC 

Antwort

1

ich diese getestet Abfrage und es funktionierte hier:

SELECT 
    sku, 
    nom/den avg_position from(
    SELECT 
    sku, 
    SUM(position * freq) nom, 
    SUM(freq) den from(
    SELECT 
     prods.productsku sku, 
     prods.productlistposition position, 
     COUNT(prods.productlistposition) freq 
    FROM 
     `project_id.dataset_id.ga_sessions_*`, 
     UNNEST(hits) AS hits, 
     UNNEST(hits.product) prods 
    WHERE 
     1 = 1 
     AND PARSE_TIMESTAMP('%Y%m%d', REGEXP_EXTRACT(_table_suffix, r'.*_(.*)')) BETWEEN TIMESTAMP('2016-04-24') AND TIMESTAMP('2016-04-30') 
     AND prods.productlistposition > 0 
    GROUP BY 
     sku, 
     position) 
    GROUP BY 
    sku) 

Beachten Sie, dass ich die Standard Version von BigQuery verwendet, da dies sehr zu empfehlen ist.

Wenn Sie die Legacy-Version verwenden müssen, ist die Anpassung dieser Abfrage möglicherweise einfach (vorausgesetzt, Sie müssen die Operation FLATTEN nicht verwenden).

Sie sagten, Sie die Positionen auf einer bestimmten Seite betrachten möchten, können dies auch in der ersten where Klausel durch Einführen der Bedingung

and hits.page.pagepath = 'your page url' 
erfolgen