| defmodule Plausible.Google.GA4.ReportRequest do |
| @moduledoc """ |
| Report request struct for Google Analytics 4 API |
| """ |
|
|
| @excluded_event_names [ |
| "page_view", |
| "session_start", |
| "first_visit", |
| "user_engagement" |
| ] |
|
|
| defstruct [ |
| :dataset, |
| :dimensions, |
| :metrics, |
| :date_range, |
| :property, |
| :access_token, |
| :offset, |
| :dimension_filter, |
| :limit |
| ] |
|
|
| @type t() :: %__MODULE__{ |
| dataset: String.t(), |
| dimensions: [String.t()], |
| metrics: [String.t()], |
| date_range: Date.Range.t(), |
| property: term(), |
| access_token: String.t(), |
| offset: non_neg_integer(), |
| limit: non_neg_integer() |
| } |
|
|
| def full_report do |
| [ |
| %__MODULE__{ |
| dataset: "imported_visitors", |
| dimensions: ["date"], |
| metrics: [ |
| "totalUsers", |
| "screenPageViews", |
| "bounces = sessions - engagedSessions", |
| "sessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_sources", |
| dimensions: [ |
| "date", |
| "sessionSource", |
| "sessionDefaultChannelGroup", |
| "sessionMedium", |
| "sessionCampaignName", |
| "sessionManualAdContent", |
| "sessionGoogleAdsKeyword" |
| ], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "bounces = sessions - engagedSessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_pages", |
| dimensions: ["date", "hostName", "pagePath"], |
| |
| metrics: [ |
| "totalUsers", |
| "activeUsers", |
| "screenPageViews", |
| "sessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_entry_pages", |
| dimensions: ["date", "landingPage"], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "userEngagementDuration", |
| "bounces = sessions - engagedSessions" |
| ] |
| }, |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| %__MODULE__{ |
| dataset: "imported_custom_events", |
| dimensions: ["date", "eventName", "linkUrl"], |
| metrics: [ |
| "totalUsers", |
| "eventCount" |
| ], |
| dimension_filter: %{ |
| "notExpression" => %{ |
| "filter" => %{ |
| "fieldName" => "eventName", |
| "inListFilter" => %{ |
| "values" => @excluded_event_names, |
| "caseSensitive" => true |
| } |
| } |
| } |
| } |
| }, |
| %__MODULE__{ |
| dataset: "imported_locations", |
| dimensions: ["date", "countryId", "region", "city"], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "bounces = sessions - engagedSessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_devices", |
| dimensions: ["date", "deviceCategory"], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "bounces = sessions - engagedSessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_browsers", |
| dimensions: ["date", "browser"], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "bounces = sessions - engagedSessions", |
| "userEngagementDuration" |
| ] |
| }, |
| %__MODULE__{ |
| dataset: "imported_operating_systems", |
| dimensions: ["date", "operatingSystem", "operatingSystemVersion"], |
| metrics: [ |
| "screenPageViews", |
| "totalUsers", |
| "sessions", |
| "bounces = sessions - engagedSessions", |
| "userEngagementDuration" |
| ] |
| } |
| ] |
| end |
| end |
|
|