Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/plausible/stats/aggregate.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ defmodule Plausible.Stats.Aggregate do
def aggregate(site, query, metrics) do
query =
query
|> Query.set(metrics: metrics, remove_unavailable_revenue_metrics: true)
|> Query.set(metrics: metrics)
|> Query.set_include(:drop_unavailable_revenue_metrics, true)
|> QueryOptimizer.optimize()

%QueryResult{results: [entry], meta: meta} = QueryRunner.run(site, query)
Expand Down
4 changes: 2 additions & 2 deletions lib/plausible/stats/breakdown.ex
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ defmodule Plausible.Stats.Breakdown do
filters: query.filters ++ dimension_filters(dimension),
pagination: %{limit: limit, offset: (page - 1) * limit},
# Allow pageview and event metrics to be queried off of sessions table
legacy_breakdown: true,
remove_unavailable_revenue_metrics: true
legacy_breakdown: true
)
|> Query.set_include(:drop_unavailable_revenue_metrics, true)

%QueryResult{results: results, meta: meta} = QueryRunner.run(site, query_with_metrics)

Expand Down
3 changes: 2 additions & 1 deletion lib/plausible/stats/dashboard/query_parser.ex
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ defmodule Plausible.Stats.Dashboard.QueryParser do
compare_match_day_of_week: params["include"]["compare_match_day_of_week"] == true,
time_labels: params["include"]["time_labels"] == true,
trim_relative_date_range: true,
drop_unavailable_time_on_page: true
drop_unavailable_time_on_page: true,
drop_unavailable_revenue_metrics: true
}}
end
end
Expand Down
1 change: 0 additions & 1 deletion lib/plausible/stats/query.ex
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ defmodule Plausible.Stats.Query do
# Revenue metric specific metadata
revenue_currencies: %{},
revenue_warning: nil,
remove_unavailable_revenue_metrics: false,
site_id: nil,
consolidated_site_ids: nil,
site_native_stats_start_at: nil,
Expand Down
3 changes: 2 additions & 1 deletion lib/plausible/stats/query_builder.ex
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,8 @@ defmodule Plausible.Stats.QueryBuilder do
end

defp validate_revenue_metrics_access(site, query) do
if Revenue.requested?(query.metrics) and not Revenue.available?(site) do
if Revenue.requested?(query.metrics) and not Revenue.available?(site) and
not query.include.drop_unavailable_revenue_metrics do
{:error,
%QueryError{
code: :feature_access,
Expand Down
6 changes: 4 additions & 2 deletions lib/plausible/stats/query_include.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ defmodule Plausible.Stats.QueryInclude do
compare: nil,
compare_match_day_of_week: false,
legacy_time_on_page_cutoff: nil,
drop_unavailable_time_on_page: false
drop_unavailable_time_on_page: false,
drop_unavailable_revenue_metrics: false

@type date_range_tuple() :: {:date_range, Date.t(), Date.t()}
@type datetime_range_tuple() :: {:datetime_range, DateTime.t(), DateTime.t()}
Expand All @@ -24,6 +25,7 @@ defmodule Plausible.Stats.QueryInclude do
nil | :previous_period | :year_over_year | date_range_tuple() | datetime_range_tuple(),
compare_match_day_of_week: boolean(),
legacy_time_on_page_cutoff: any(),
drop_unavailable_time_on_page: boolean()
drop_unavailable_time_on_page: boolean(),
drop_unavailable_revenue_metrics: boolean()
}
end
3 changes: 2 additions & 1 deletion lib/plausible/stats/query_optimizer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ defmodule Plausible.Stats.QueryOptimizer do

on_ee do
defp remove_revenue_metrics_if_unavailable(query) do
if query.remove_unavailable_revenue_metrics and map_size(query.revenue_currencies) == 0 do
if query.include.drop_unavailable_revenue_metrics and
map_size(query.revenue_currencies) == 0 do
Query.set(query, metrics: query.metrics -- Plausible.Stats.Goal.Revenue.revenue_metrics())
else
query
Expand Down
4 changes: 2 additions & 2 deletions lib/plausible/stats/timeseries.ex
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ defmodule Plausible.Stats.Timeseries do
|> Query.set(
metrics: transform_metrics(metrics, %{conversion_rate: :group_conversion_rate}),
dimensions: [time_dimension(query)],
order_by: [{time_dimension(query), :asc}],
remove_unavailable_revenue_metrics: true
order_by: [{time_dimension(query), :asc}]
)
|> Query.set_include(:drop_unavailable_revenue_metrics, true)
|> QueryOptimizer.optimize()

comparison_query =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,35 @@ defmodule PlausibleWeb.Api.StatsController.InternalQueryApiTest do
setup [:create_user, :log_in, :create_site]

describe "aggregates (e.g. top stats)" do
on_ee do
test "drops revenue metrics when they are not allowed", %{
conn: conn,
user: user,
site: site
} do
{:ok, team} = Plausible.Teams.get_or_create(user)
insert(:goal, site: site, event_name: "Purchase", currency: "EUR")
subscribe_to_growth_plan(team)

params = %{
"date_range" => "day",
"filters" => [["is", "event:goal", ["Purchase"]]],
"metrics" => [
"visitors",
"events",
"conversion_rate",
"total_revenue",
"average_revenue"
]
}

%{"results" => results, "query" => query} = do_query_success(conn, site, params)

assert query["metrics"] == ["visitors", "events", "conversion_rate"]
assert results == [%{"dimensions" => [], "metrics" => [0, 0, 0.0]}]
end
end

test "returns empty metrics when no data", %{conn: conn, site: site} do
requested_metrics = [
"visitors",
Expand Down
Loading