@gscdump/analysis 0.26.7 → 0.26.9

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
  `,
@@ -3112,7 +3133,7 @@ const longTailAnalyzer = defineAnalyzer({
3112
3133
  const limit = params.limit ?? 100;
3113
3134
  return {
3114
3135
  sql: `
3115
- WITH page_queries AS (
3136
+ WITH pq AS (
3116
3137
  SELECT
3117
3138
  url AS page,
3118
3139
  query,
@@ -3129,7 +3150,7 @@ const longTailAnalyzer = defineAnalyzer({
3129
3150
  SELECT
3130
3151
  page, query, impressions, clicks,
3131
3152
  ROW_NUMBER() OVER (PARTITION BY page ORDER BY impressions DESC, query ASC) AS rnk
3132
- FROM page_queries
3153
+ FROM pq
3133
3154
  ),
3134
3155
  log_space AS (
3135
3156
  SELECT *,
@@ -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
  `,
@@ -3106,7 +3127,7 @@ const longTailAnalyzer = defineAnalyzer({
3106
3127
  const limit = params.limit ?? 100;
3107
3128
  return {
3108
3129
  sql: `
3109
- WITH page_queries AS (
3130
+ WITH pq AS (
3110
3131
  SELECT
3111
3132
  url AS page,
3112
3133
  query,
@@ -3123,7 +3144,7 @@ const longTailAnalyzer = defineAnalyzer({
3123
3144
  SELECT
3124
3145
  page, query, impressions, clicks,
3125
3146
  ROW_NUMBER() OVER (PARTITION BY page ORDER BY impressions DESC, query ASC) AS rnk
3126
- FROM page_queries
3147
+ FROM pq
3127
3148
  ),
3128
3149
  log_space AS (
3129
3150
  SELECT *,
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
  `,
@@ -3486,7 +3507,7 @@ const longTailAnalyzer = defineAnalyzer$1({
3486
3507
  const limit = params.limit ?? 100;
3487
3508
  return {
3488
3509
  sql: `
3489
- WITH page_queries AS (
3510
+ WITH pq AS (
3490
3511
  SELECT
3491
3512
  url AS page,
3492
3513
  query,
@@ -3503,7 +3524,7 @@ const longTailAnalyzer = defineAnalyzer$1({
3503
3524
  SELECT
3504
3525
  page, query, impressions, clicks,
3505
3526
  ROW_NUMBER() OVER (PARTITION BY page ORDER BY impressions DESC, query ASC) AS rnk
3506
- FROM page_queries
3527
+ FROM pq
3507
3528
  ),
3508
3529
  log_space AS (
3509
3530
  SELECT *,
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.9",
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.9",
79
+ "@gscdump/engine-gsc-api": "0.26.9",
80
+ "gscdump": "0.26.9"
81
81
  },
82
82
  "devDependencies": {
83
83
  "vitest": "^4.1.8"