`

# Aggregated Methods

##### Original data
nameageincome
John 26 \$50,000
Marry 29 \$60,000
Peter 34 \$100,000
Donald 28 \$80,000
filter()
``````
\$store = \$this->dataStore("data")
->filter("income",">",50000);
``````
nameageincome
Marry 29 \$60,000
Peter 34 \$100,000
Donald 28 \$80,000
filter(\$callback)
``````
\$store = \$this->dataStore("data")
->filter(function(\$row){
return \$row["income"]>50000;
});
``````
nameageincome
Marry 29 \$60,000
Peter 34 \$100,000
Donald 28 \$80,000
where()
``````
\$store = \$this->dataStore("data")
->where("income",60000);
``````
nameageincome
Marry 29 \$60,000
except()
``````
\$store = \$this->dataStore("data")
->except("income","age");
``````
name
John
Marry
Peter
Donald
only()
``````
\$store = \$this->dataStore("data")
->only("name","income");
``````
nameincome
John \$50,000
Marry \$60,000
Peter \$100,000
Donald \$80,000
whereIn()
``````
\$store = \$this->dataStore("data")
->whereIn("name",["John","Marry"]);
``````
nameageincome
John 26 \$50,000
Marry 29 \$60,000
whereNotIn()
``````
\$store = \$this->dataStore("data")
->whereNotIn("name",["John","Marry"]);
``````
nameageincome
Peter 34 \$100,000
Donald 28 \$80,000

This example shows some of most used methods for filtering in `DataStore`.

Beside above most used methods, there are number of additional methods:

1. `all()`: Return all rows
2. `top(\$size,\$offset)`: Get the top {\$size} rows starting from {\$offset}
3. `topByPercent(\$percent)`: Get top percent of rows
4. `bottom(\$size)`: Get the bottom {\$size} rows
5. `bottomByPercent(\$percent)`: Get bottom percent of rows
6. `first(\$callback)`: Return the first row matching condition defined by callback function
7. `last(\$callback)`: Return the last row matching condition defined by callback function
8. `take(\$limit)`: Get number of rows, if \$limit is negative, take the bottom
``````<?php
require_once "MyReport.php";

\$report = new MyReport;
\$report->run()->render();
``````
``````<?php

use \koolreport\processes\ColumnMeta;
use \koolreport\processes\Filter;

//Step 2: Creating Report class
class MyReport extends \koolreport\KoolReport
{
protected function settings()
{
return array(
"dataSources"=>array(
"data"=>array(
"class"=>'\koolreport\datasources\ArrayDataSource',
"dataFormat"=>"table",
"data"=>array(
array("name","age","income"),
array("John",26,50000),
array("Marry",29,60000),
array("Peter",34,100000),
array("Donald",28,80000),
)
)
)
);
}
protected function setup()
{
//Prepare data
\$this->src("data")
->pipe(new ColumnMeta(array(
"income"=>array(
"type"=>"number",
"prefix"=>"\$"
)
)))
->pipe(\$this->dataStore("data"));
}
}``````
``````<?php
use \koolreport\widgets\koolphp\Table;
?>
<div class="report-content">
<div class="text-center">
<h1>Aggregated Methods</h1>
</div>

<h5>Original data</h5>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data"),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>

<div class="row">
<div class="col-md-6">
<div class="card">
<b>filter()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->filter("income",">",50000);
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->filter("income",">",50000),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<b>filter(\$callback)</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->filter(function(\$row){
return \$row["income"]>50000;
});
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->filter(function(\$row){
return \$row["income"]>50000;
}),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>

<div class="col-md-6">
<div class="card">
<b>where()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->where("income",60000);
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->where("income",60000),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<b>except()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->except("income","age");
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->except("income","age"),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<b>only()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->only("name","income");
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->only("name","income"),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<b>whereIn()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->whereIn("name",["John","Marry"]);
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->whereIn("name",["John","Marry"]),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<b>whereNotIn()</b>
</div>
<div class="card-body">
<pre style="font-weight:bold"><code>
\$store = \$this->dataStore("data")
->whereNotIn("name",["John","Marry"]);
</code></pre>
<?php
Table::create(array(
"dataSource"=>\$this->dataStore("data")->whereNotIn("name",["John","Marry"]),
"cssClass"=>array(
"table"=>"table-bordered table-striped table-hover"
)
));
?>
</div>
</div>
</div>
<div class="col-md-6">

</div>
</div>

</div>``````

### What People Are Saying

"KoolReport helps me very much in creating data report for my corporate! Keep up your good work!"
-- Alain Melsens

"The first use of your product. I was impressed by its easiness and powerfulness. This product is a great and amazing."
-- Dr. Lew Choy Onn

"Fantastic framework for reporting!"
-- Greg Schneider