blob: aa3dc82f14c87c03174b2310e231dc8b00d7ce28 (
plain)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
* @category Piwik
* @package Piwik
*/
/**
* Delete all rows that have a $columnToFilter value less than the $minimumValue
*
* For example we delete from the countries report table all countries that have less than 3 visits.
* It is very useful to exclude noise from the reports.
* You can obviously apply this filter on a percentaged column, eg. remove all countries with the column 'percent_visits' less than 0.05
*
* @package Piwik
* @subpackage Piwik_DataTable
*/
class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
{
static public $minimumValue;
const MINIMUM_SIGNIFICANT_PERCENTAGE_THRESHOLD = 0.02;
/**
* Constructor
*
* @param Piwik_DataTable $table
* @param string $columnToFilter column to filter
* @param number $minimumValue minimum value
* @param bool $minimumPercentageThreshold
*/
public function __construct( $table, $columnToFilter, $minimumValue, $minimumPercentageThreshold = false )
{
parent::__construct($table);
$this->columnToFilter = $columnToFilter;
if($minimumValue == 0)
{
if($minimumPercentageThreshold === false)
{
$minimumPercentageThreshold = self::MINIMUM_SIGNIFICANT_PERCENTAGE_THRESHOLD;
}
$allValues = $table->getColumn($this->columnToFilter);
$sumValues = array_sum($allValues);
$minimumValue = $sumValues * $minimumPercentageThreshold;
}
self::$minimumValue = $minimumValue;
}
/**
* Executes filter and removes all rows below the defined minimum
*
* @param Piwik_DataTable $table
*/
function filter($table)
{
$table->filter('ColumnCallbackDeleteRow',
array($this->columnToFilter,
array("Piwik_DataTable_Filter_ExcludeLowPopulation", "excludeLowPopulation")
)
);
}
/**
* Checks whether the given value is below the defined minimum
*
* @param number $value value to check
* @return bool
*/
static public function excludeLowPopulation($value)
{
return $value >= self::$minimumValue;
}
}
|