From ee4db40c7047776eee0fb70d2868cc5be909c76d Mon Sep 17 00:00:00 2001 From: gnzjgo Date: Wed, 11 Feb 2026 23:52:22 +0100 Subject: [PATCH] Fix KPI hourly granularity with previous period Amp-Thread-ID: https://ampcode.com/threads/T-019c4ebf-6034-7789-a533-627df02d1097 Co-authored-by: Amp --- tinybird/fixtures/analytics_events.ndjson | 4 ++++ tinybird/src/endpoints.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 tinybird/fixtures/analytics_events.ndjson diff --git a/tinybird/fixtures/analytics_events.ndjson b/tinybird/fixtures/analytics_events.ndjson new file mode 100644 index 0000000..fcca246 --- /dev/null +++ b/tinybird/fixtures/analytics_events.ndjson @@ -0,0 +1,4 @@ +{"timestamp":"2026-02-10 10:10:00","session_id":"session-yesterday-1","action":"page_hit","version":"v1","payload":"{\"domain\":\"example.com\",\"location\":\"US\",\"referrer\":\"https://google.com\",\"pathname\":\"/\",\"href\":\"https://example.com/\",\"user-agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36\"}","tenant_id":"test-tenant","domain":"example.com"} +{"timestamp":"2026-02-10 11:45:00","session_id":"session-yesterday-2","action":"page_hit","version":"v1","payload":"{\"domain\":\"example.com\",\"location\":\"US\",\"referrer\":\"https://google.com\",\"pathname\":\"/pricing\",\"href\":\"https://example.com/pricing\",\"user-agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36\"}","tenant_id":"test-tenant","domain":"example.com"} +{"timestamp":"2026-02-11 10:15:00","session_id":"session-today-1","action":"page_hit","version":"v1","payload":"{\"domain\":\"example.com\",\"location\":\"US\",\"referrer\":\"https://news.ycombinator.com\",\"pathname\":\"/\",\"href\":\"https://example.com/\",\"user-agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36\"}","tenant_id":"test-tenant","domain":"example.com"} +{"timestamp":"2026-02-11 11:20:00","session_id":"session-today-2","action":"page_hit","version":"v1","payload":"{\"domain\":\"example.com\",\"location\":\"US\",\"referrer\":\"https://news.ycombinator.com\",\"pathname\":\"/docs\",\"href\":\"https://example.com/docs\",\"user-agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36\"}","tenant_id":"test-tenant","domain":"example.com"} diff --git a/tinybird/src/endpoints.ts b/tinybird/src/endpoints.ts index f72088c..6d105aa 100644 --- a/tinybird/src/endpoints.ts +++ b/tinybird/src/endpoints.ts @@ -379,7 +379,8 @@ export const kpis = defineEndpoint("kpis", { FROM timeseries a LEFT JOIN current_period_data b ON a.date = b.date LEFT JOIN previous_period_data p ON a.date = timestampAdd(p.date, interval (SELECT period_days FROM date_calculations) day) - WHERE a.date >= (SELECT current_start FROM date_calculations) AND a.date <= (SELECT current_end FROM date_calculations) + WHERE a.date >= (SELECT current_start FROM date_calculations) + AND a.date <= timestampAdd((SELECT current_end FROM date_calculations), interval 1 day) {% else %} SELECT a.date date,