Skip to content

Commit 33df67f

Browse files
committed
WIP
1 parent b70e116 commit 33df67f

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

lib/plausible/stats/sql/expression.ex

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,21 @@ defmodule Plausible.Stats.SQL.Expression do
208208
end
209209
end
210210

211+
def select_dimension_from_join(q, key, "event:name"),
212+
do: select_merge_as(q, [..., t], %{key => t.name})
213+
214+
def select_dimension_from_join(q, key, "event:page"),
215+
do: select_merge_as(q, [..., t], %{key => t.pathname})
216+
217+
def select_dimension_from_join(q, key, "event:hostname"),
218+
do: select_merge_as(q, [..., t], %{key => t.hostname})
219+
220+
def select_dimension_from_join(q, key, "visit:entry_page"),
221+
do: select_merge_as(q, [..., t], %{key => t.entry_page})
222+
223+
def select_dimension_from_join(q, key, "visit:exit_page"),
224+
do: select_merge_as(q, [..., t], %{key => t.exit_page})
225+
211226
def event_metric(:pageviews, _query) do
212227
wrap_alias([e], %{
213228
pageviews: scale_sample(fragment("countIf(? = 'pageview')", e.name))

lib/plausible/stats/sql/query_builder.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ defmodule Plausible.Stats.SQL.QueryBuilder do
1919
|> QueryOptimizer.split()
2020
|> Enum.map(fn {table_type, table_query} ->
2121
q = build_table_query(table_type, site, table_query)
22+
{table_type, q} |> IO.inspect(label: :QUERY)
2223
{table_type, table_query, q}
2324
end)
2425
|> join_query_results(query)
26+
|> IO.inspect(label: :JOINED_QUERY)
2527
|> build_order_by(query)
2628
|> paginate(query.pagination)
2729
|> select_total_rows(query.include.total_rows)
@@ -148,12 +150,20 @@ defmodule Plausible.Stats.SQL.QueryBuilder do
148150
Enum.reduce(
149151
session_only_dimensions,
150152
q,
151-
&dimension_group_by(&2, :events, :sessions, query, &1)
153+
&dimension_group_by_join(&2, query, &1)
152154
)
153155
end
154156

155157
def build_group_by(q, :sessions, query) do
156-
Enum.reduce(query.dimensions, q, &dimension_group_by(&2, table, query, &1))
158+
Enum.reduce(query.dimensions, q, &dimension_group_by(&2, :sessions, query, &1))
159+
end
160+
161+
defp dimension_group_by_join(q, query, dimension) do
162+
key = shortname(query, dimension)
163+
164+
q
165+
|> Expression.select_dimension_from_join(key, dimension)
166+
|> group_by([], selected_as(^key))
157167
end
158168

159169
defp dimension_group_by(q, :events, query, "event:goal" = dimension) do
@@ -178,9 +188,6 @@ defmodule Plausible.Stats.SQL.QueryBuilder do
178188
|> group_by([], selected_as(^key))
179189
end
180190

181-
defp dimension_group_by(q, base_table, join_table, query, dimension) do
182-
end
183-
184191
defp build_order_by(q, query, {metric_or_dimension, order_direction}) do
185192
order_by(
186193
q,

0 commit comments

Comments
 (0)