File size: 1,012 Bytes
8da2481
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
defmodule Plausible.Stats.Compare do
  def calculate_change(:conversion_rate, old_value, new_value) do
    Float.round(new_value - old_value, 1)
  end

  def calculate_change(:exit_rate, old_value, new_value) do
    if is_float(old_value) and is_float(new_value) do
      Float.round(new_value - old_value, 1)
    end
  end

  def calculate_change(:bounce_rate, old_count, new_count) do
    if old_count > 0, do: new_count - old_count
  end

  def calculate_change(_metric, old_count, new_count) do
    percent_change(old_count, new_count)
  end

  def percent_change(nil, _new_count), do: nil
  def percent_change(_old_count, nil), do: nil

  def percent_change(%{value: old_count}, %{value: new_count}) do
    percent_change(old_count, new_count)
  end

  def percent_change(old_count, new_count) do
    cond do
      old_count == 0 and new_count > 0 ->
        100

      old_count == 0 and new_count == 0 ->
        0

      true ->
        round((new_count - old_count) / old_count * 100)
    end
  end
end