This report show you how to load data from CSV, perform data aggregation and produce nice charts and tables.
As you may see, KoolReport will automatically load your data from CSV and pipe them through TimeBucket
process then Group
process to group data by month. The TimeBucket is a special process to separate time data into bucket like week, month or year. The data after piping through all processed will be stored in "sales_by_month"
data store ready to visualize by the view.
In the report view, we use ColumnChart
to visualize and Table
to display data in details.
<?php
require_once "SakilaRental.php";
$report = new SakilaRental;
$report->run()->render();
<?php
require_once "../../../load.koolreport.php";
use \koolreport\KoolReport;
use \koolreport\processes\Filter;
use \koolreport\processes\TimeBucket;
use \koolreport\processes\Group;
use \koolreport\processes\Limit;
class SakilaRental extends KoolReport
{
public function settings()
{
return array(
"dataSources"=>array(
"sakila_rental"=>array(
"class"=>'\koolreport\datasources\CSVDataSource',
'filePath'=>dirname(__FILE__)."/sakila_rental.csv",
)
)
);
}
protected function setup()
{
$this->src('sakila_rental')
->pipe(new TimeBucket(array(
"payment_date"=>"month"
)))
->pipe(new Group(array(
"by"=>"payment_date",
"sum"=>"amount"
)))
->pipe($this->dataStore('sale_by_month'));
}
}
<?php
use \koolreport\widgets\koolphp\Table;
use \koolreport\widgets\google\ColumnChart;
?>
<div class="report-content">
<div class="text-center">
<h1>CSV Report</h1>
<p class="lead">The report shows how to build report from CSV data</p>
</div>
<?php
ColumnChart::create(array(
"dataStore"=>$this->dataStore('sale_by_month'),
"columns"=>array(
"payment_date"=>array(
"label"=>"Month",
"type"=>"datetime",
"format"=>"Y-n",
"displayFormat"=>"F, Y",
),
"amount"=>array(
"label"=>"Amount",
"type"=>"number",
"prefix"=>"$",
)
),
"width"=>"100%",
));
?>
<?php
Table::create(array(
"dataStore"=>$this->dataStore('sale_by_month'),
"columns"=>array(
"payment_date"=>array(
"label"=>"Month",
"type"=>"datetime",
"format"=>"Y-n",
"displayFormat"=>"F, Y",
),
"amount"=>array(
"label"=>"Amount",
"type"=>"number",
"prefix"=>"$",
)
),
"cssClass"=>array(
"table"=>"table table-hover table-bordered"
)
));
?>
</div>
payment_date | amount |
2005-05-25 11:30:37 |
2.99 |
2005-05-28 10:35:23 |
0.99 |
2005-06-15 00:54:12 |
5.99 |
2005-06-15 18:02:53 |
0.99 |
2005-06-15 21:08:46 |
9.99 |
2005-06-16 15:18:57 |
4.99 |
2005-06-18 08:41:48 |
4.99 |
2005-06-18 13:33:59 |
0.99 |
2005-06-21 06:24:45 |
3.99 |
2005-07-08 03:17:05 |
5.99 |