diff --git a/lib/plausible/stats/imported/sql/expression.ex b/lib/plausible/stats/imported/sql/expression.ex index 4ef755f3da..d8b4ebf835 100644 --- a/lib/plausible/stats/imported/sql/expression.ex +++ b/lib/plausible/stats/imported/sql/expression.ex @@ -231,6 +231,18 @@ defmodule Plausible.Stats.Imported.SQL.Expression do }) end + defp select_group_fields(q, "visit:channel", key, _query) do + select_merge_as(q, [i], %{ + key => + fragment( + "if(empty(?), ?, ?)", + i.channel, + @not_set, + i.channel + ) + }) + end + defp select_group_fields(q, "event:page", key, _query) do select_merge_as(q, [i], %{key => i.page, time_on_page: sum(i.time_on_page)}) end diff --git a/test/plausible_web/controllers/api/stats_controller/imported_test.exs b/test/plausible_web/controllers/api/stats_controller/imported_test.exs index 93700dc936..7224fbd364 100644 --- a/test/plausible_web/controllers/api/stats_controller/imported_test.exs +++ b/test/plausible_web/controllers/api/stats_controller/imported_test.exs @@ -381,6 +381,24 @@ defmodule PlausibleWeb.Api.StatsController.ImportedTest do "totalUsers" => "1", "screenPageViews" => "1" } + }, + %{ + dimensions: %{ + "sessionManualAdContent" => "", + "sessionCampaignName" => "", + "date" => "20210101", + "sessionGoogleAdsKeyword" => "", + "sessionMedium" => "(none)", + "sessionSource" => "(direct)", + "sessionDefaultChannelGroup" => "" + }, + metrics: %{ + "bounces" => "1", + "userEngagementDuration" => "60", + "sessions" => "1", + "totalUsers" => "1", + "screenPageViews" => "1" + } } ], site.id, @@ -398,6 +416,7 @@ defmodule PlausibleWeb.Api.StatsController.ImportedTest do |> Enum.sort() assert results == [ + %{"name" => "(not set)", "visitors" => 1}, %{"name" => "Direct", "visitors" => 2}, %{"name" => "Organic Search", "visitors" => 3}, %{"name" => "Paid Search", "visitors" => 2}