@gscdump/analysis 0.26.7 → 0.26.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2675,15 +2675,36 @@ const deviceGapAnalyzer = defineAnalyzer({
2675
2675
  const { startDate, endDate } = periodOf(params);
2676
2676
  return {
2677
2677
  sql: `
2678
+ WITH raw AS (
2679
+ SELECT
2680
+ date,
2681
+ COALESCE(clicks_desktop, 0) AS c_desktop,
2682
+ COALESCE(clicks_mobile, 0) AS c_mobile,
2683
+ COALESCE(clicks_tablet, 0) AS c_tablet,
2684
+ COALESCE(impressions_desktop, 0) AS i_desktop,
2685
+ COALESCE(impressions_mobile, 0) AS i_mobile,
2686
+ COALESCE(impressions_tablet, 0) AS i_tablet,
2687
+ COALESCE(sum_position_desktop, 0) AS p_desktop,
2688
+ COALESCE(sum_position_mobile, 0) AS p_mobile,
2689
+ COALESCE(sum_position_tablet, 0) AS p_tablet
2690
+ FROM read_parquet({{FILES}}, union_by_name = true)
2691
+ WHERE date >= ? AND date <= ?
2692
+ ),
2693
+ device_long AS (
2694
+ SELECT date, 'DESKTOP' AS device, c_desktop AS clicks, i_desktop AS impressions, p_desktop AS sum_position FROM raw
2695
+ UNION ALL
2696
+ SELECT date, 'MOBILE', c_mobile, i_mobile, p_mobile FROM raw
2697
+ UNION ALL
2698
+ SELECT date, 'TABLET', c_tablet, i_tablet, p_tablet FROM raw
2699
+ )
2678
2700
  SELECT
2679
2701
  date,
2680
2702
  device,
2681
- ${METRIC_EXPR.clicks} AS clicks,
2682
- ${METRIC_EXPR.impressions} AS impressions,
2683
- ${METRIC_EXPR.ctr} AS ctr,
2684
- ${METRIC_EXPR.position} AS position
2685
- FROM read_parquet({{FILES}}, union_by_name = true)
2686
- WHERE date >= ? AND date <= ?
2703
+ CAST(SUM(clicks) AS DOUBLE) AS clicks,
2704
+ CAST(SUM(impressions) AS DOUBLE) AS impressions,
2705
+ CAST(SUM(clicks) AS DOUBLE) / NULLIF(SUM(impressions), 0) AS ctr,
2706
+ SUM(sum_position) / NULLIF(SUM(impressions), 0) + 1 AS position
2707
+ FROM device_long
2687
2708
  GROUP BY date, device
2688
2709
  ORDER BY date ASC
2689
2710
  `,
@@ -2669,15 +2669,36 @@ const deviceGapAnalyzer = defineAnalyzer({
2669
2669
  const { startDate, endDate } = periodOf(params);
2670
2670
  return {
2671
2671
  sql: `
2672
+ WITH raw AS (
2673
+ SELECT
2674
+ date,
2675
+ COALESCE(clicks_desktop, 0) AS c_desktop,
2676
+ COALESCE(clicks_mobile, 0) AS c_mobile,
2677
+ COALESCE(clicks_tablet, 0) AS c_tablet,
2678
+ COALESCE(impressions_desktop, 0) AS i_desktop,
2679
+ COALESCE(impressions_mobile, 0) AS i_mobile,
2680
+ COALESCE(impressions_tablet, 0) AS i_tablet,
2681
+ COALESCE(sum_position_desktop, 0) AS p_desktop,
2682
+ COALESCE(sum_position_mobile, 0) AS p_mobile,
2683
+ COALESCE(sum_position_tablet, 0) AS p_tablet
2684
+ FROM read_parquet({{FILES}}, union_by_name = true)
2685
+ WHERE date >= ? AND date <= ?
2686
+ ),
2687
+ device_long AS (
2688
+ SELECT date, 'DESKTOP' AS device, c_desktop AS clicks, i_desktop AS impressions, p_desktop AS sum_position FROM raw
2689
+ UNION ALL
2690
+ SELECT date, 'MOBILE', c_mobile, i_mobile, p_mobile FROM raw
2691
+ UNION ALL
2692
+ SELECT date, 'TABLET', c_tablet, i_tablet, p_tablet FROM raw
2693
+ )
2672
2694
  SELECT
2673
2695
  date,
2674
2696
  device,
2675
- ${METRIC_EXPR.clicks} AS clicks,
2676
- ${METRIC_EXPR.impressions} AS impressions,
2677
- ${METRIC_EXPR.ctr} AS ctr,
2678
- ${METRIC_EXPR.position} AS position
2679
- FROM read_parquet({{FILES}}, union_by_name = true)
2680
- WHERE date >= ? AND date <= ?
2697
+ CAST(SUM(clicks) AS DOUBLE) AS clicks,
2698
+ CAST(SUM(impressions) AS DOUBLE) AS impressions,
2699
+ CAST(SUM(clicks) AS DOUBLE) / NULLIF(SUM(impressions), 0) AS ctr,
2700
+ SUM(sum_position) / NULLIF(SUM(impressions), 0) + 1 AS position
2701
+ FROM device_long
2681
2702
  GROUP BY date, device
2682
2703
  ORDER BY date ASC
2683
2704
  `,
package/dist/index.mjs CHANGED
@@ -3049,15 +3049,36 @@ const deviceGapAnalyzer = defineAnalyzer$1({
3049
3049
  const { startDate, endDate } = periodOf$1(params);
3050
3050
  return {
3051
3051
  sql: `
3052
+ WITH raw AS (
3053
+ SELECT
3054
+ date,
3055
+ COALESCE(clicks_desktop, 0) AS c_desktop,
3056
+ COALESCE(clicks_mobile, 0) AS c_mobile,
3057
+ COALESCE(clicks_tablet, 0) AS c_tablet,
3058
+ COALESCE(impressions_desktop, 0) AS i_desktop,
3059
+ COALESCE(impressions_mobile, 0) AS i_mobile,
3060
+ COALESCE(impressions_tablet, 0) AS i_tablet,
3061
+ COALESCE(sum_position_desktop, 0) AS p_desktop,
3062
+ COALESCE(sum_position_mobile, 0) AS p_mobile,
3063
+ COALESCE(sum_position_tablet, 0) AS p_tablet
3064
+ FROM read_parquet({{FILES}}, union_by_name = true)
3065
+ WHERE date >= ? AND date <= ?
3066
+ ),
3067
+ device_long AS (
3068
+ SELECT date, 'DESKTOP' AS device, c_desktop AS clicks, i_desktop AS impressions, p_desktop AS sum_position FROM raw
3069
+ UNION ALL
3070
+ SELECT date, 'MOBILE', c_mobile, i_mobile, p_mobile FROM raw
3071
+ UNION ALL
3072
+ SELECT date, 'TABLET', c_tablet, i_tablet, p_tablet FROM raw
3073
+ )
3052
3074
  SELECT
3053
3075
  date,
3054
3076
  device,
3055
- ${METRIC_EXPR.clicks} AS clicks,
3056
- ${METRIC_EXPR.impressions} AS impressions,
3057
- ${METRIC_EXPR.ctr} AS ctr,
3058
- ${METRIC_EXPR.position} AS position
3059
- FROM read_parquet({{FILES}}, union_by_name = true)
3060
- WHERE date >= ? AND date <= ?
3077
+ CAST(SUM(clicks) AS DOUBLE) AS clicks,
3078
+ CAST(SUM(impressions) AS DOUBLE) AS impressions,
3079
+ CAST(SUM(clicks) AS DOUBLE) / NULLIF(SUM(impressions), 0) AS ctr,
3080
+ SUM(sum_position) / NULLIF(SUM(impressions), 0) + 1 AS position
3081
+ FROM device_long
3061
3082
  GROUP BY date, device
3062
3083
  ORDER BY date ASC
3063
3084
  `,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gscdump/analysis",
3
3
  "type": "module",
4
- "version": "0.26.7",
4
+ "version": "0.26.8",
5
5
  "description": "GSC analyzers — striking-distance, opportunity, movers, decay, brand, clustering, concentration, seasonality. Pure row-based + DuckDB-native.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -75,9 +75,9 @@
75
75
  },
76
76
  "dependencies": {
77
77
  "drizzle-orm": "1.0.0-rc.3",
78
- "@gscdump/engine": "0.26.7",
79
- "@gscdump/engine-gsc-api": "0.26.7",
80
- "gscdump": "0.26.7"
78
+ "@gscdump/engine": "0.26.8",
79
+ "@gscdump/engine-gsc-api": "0.26.8",
80
+ "gscdump": "0.26.8"
81
81
  },
82
82
  "devDependencies": {
83
83
  "vitest": "^4.1.8"