analytics/lib
RobertJoonas 672d682e95
Bring Stats API up to speed: Add conversion_rate to Aggregate and Breakdown (#3739)
* disable event metric with include_imported in every case

* add missing test for metric validation

* refactor metric validation functions

* implement conversion_rate metric validation

* move calculate_cr function into Stats.Util

* Refactor: Move aggregate CR logic into Stats.aggregate

* define atoms to exist

* Ensure that CR does not depend on visitors being queried

If 'visitors' are already queried, we'll use that value. Otherwise we'll
need to make another query to fetch it.

* confirm Stats API aggregate supports CR (tests only)

* small refactor

This is the only 'event_property' left after pattern matching on all
others in the function clauses defined above.

* Make it possible to optionally query conversion_rate

...in breakdown queries (excluding goal and custom prop breakdown)

* A little refactor asking for revenue metrics

1. The `@revenue_metrics` module attribute is an empty list on full build
   anyway
2. We don't need to query for revenue metrics if there are no revenue goals
   returned in the given query (even if revenue goals exist in site.goals)
3. Revenue metrics are already dropped in prop breakdown without a goal
   filter via (get_revenue_tracking_currency/3)

* Make it possible to optionally query conversion_rate (continuation)

... also from a custom prop and goal breakdown

* Frontend adjustments to the Locations report

* Display conversion rate in Regions and Cities (ListReport view)
* Display total conversions, conversions (visitors), and CR in the
  "Details" modals of Countries, Regions, and Cities
* Move the percentage into a separate column in the Countries details table

* confirm Stats API breakdown supports conversion_rate (tests only)

* small refactor: extract maybe_add_time_on_page function

* Make it possible to query cr alone

... (without the visitors metric). Already supported in aggregate, this
commit only implements it for the breakdown API.

* Reuse Stats.Util helper functions from b02db88 for aggregate API

We can follow the same logic as with breakdown for manually adding
`visitors` into the metrics list and taking it out of the response
later on.

That way we don't have to make another query, e.g. in a case where
only pageviews and conversion rate is queried. Also keeps things
consistent.

* changelog update

* fix test after resolving merge conflict

* Use explicit string->atom mapping instead of casting

* alias Util module instead of importing it

* use Enum.empty instead of Enum.any

* improve readability

* rename special_metrics to computed_metrics and explain with a comment

* rename visitors_without_event_filters to total_visitors

* keep a single function for removing unwanted metrics

---------

Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
2024-02-15 09:18:57 +00:00
..
mix/tasks Move Mix.Task.DumpPlans to Plausible.Release (#3544) 2023-11-21 12:22:17 -03:00
plausible Bring Stats API up to speed: Add conversion_rate to Aggregate and Breakdown (#3739) 2024-02-15 09:18:57 +00:00
plausible_web Bring Stats API up to speed: Add conversion_rate to Aggregate and Breakdown (#3739) 2024-02-15 09:18:57 +00:00
workers Add multiple imports per site (#3724) 2024-02-14 09:32:36 +01:00
oban_error_reporter.ex safe(r) Oban telemetry (#3743) 2024-02-14 10:12:03 +01:00
plausible_release.ex Remove custom domains support + update build options (#3559) 2023-11-29 11:04:54 +01:00
plausible_web.ex Merge Plugins.API.Router into main one (#3767) 2024-02-12 10:44:32 +01:00
plausible.ex Remove custom domains support + update build options (#3559) 2023-11-29 11:04:54 +01:00
sentry_filter.ex derive jason encoder for request (#3182) 2023-07-24 14:46:57 +02:00