aldeebhasan / fast-bi
此包可以帮助您为项目添加完全定制的控件
Requires
- php: >=8.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.3
README
Fast-Bi 是一个轻量级的商业智能仪表盘管理器,适用于所有 PHP 项目。
安装
使用 composer 安装 Fast-Bi
composer require aldeebhasan/fast-bi
要求
Fast-Bi 需要 PHP 8.0 或更高版本。它可以在任何使用 PHP 的平台上运行,如 Laravel、CodeIgniter、Symphony 等。
主要功能和概念
Fast-Bi 允许您向仪表盘添加不同类型的控件。主要组件是 Widget
,它可以使用 Dimension
、Metric
或原始数组来完全自定义所需的控件。
维度
Dimension
是一个数据容器,可以接受任何数组作为输入,对其进行一些转换和准备,以获得所需的数据。可以将 Dimension
视为图表的轴,表格的列,具有预定义的功能。
维度类型
- dateTime:将输入转换为日期时间格式
- string:将输入转换为字符串
- number:将输入转换为浮点格式
- raw:将输入转换为自定义格式
如何定义新的维度
use Aldeebhasan\FastBi\Manager\Dimensions; Dimensions::string('dimension-1',[1,2,4])->build(); Dimensions::number('dimension-2',[1,2,4])->build(); Dimensions::dateTime('dimension-3',['2023-5-5', '2024-6-6'])->build(); // to retrieve the dimension data you can use the `getData()` function. $dimension = Dimensions::string('dimension-1',[1,2,4])->build(); print($dimension->getData()) //result = ["1","2","4"]//
dateTime
维度接受一个 format($format)
函数来格式化结果数据。
示例
$dimension = Dimensions::dateTime('dimension',['2023-5-5', '2024-6-6'])->format('Y-m')->build(); print($dimension->getData()) //result = ["2023-5","2024-6"]//
要构建自定义维度,您可以使用以下 raw
维度
转换器将应用于输入数组的每个项目
$dimension = Dimensions::raw('dimension', [1, 2, 3, 4]) ->setTransformer(fn ($x) => $x - 1) ->build(); print($dimension->getData()) //result = [0, 1, 2, 3]//
度量
Metric
是一个数据容器,可以接受任何数组作为输入,对其进行一些操作以获得所需度量。主要可以使用 Metric
来显示一些统计数据。
度量类型
- sum:获取输入数据的总和
- max:获取输入数据的最大值
- min:获取输入数据的最小值
- median:获取输入数据的中间值
- avg:获取输入数据的平均值
- raw:获取输入数据的自定义值
如何定义新的度量
use Aldeebhasan\FastBi\Manager\Metrics; Metrics::sum('metric-1',[1,2,3])->build(); Metrics::max('metric-2',[1,2,3])->build(); Metrics::min('metric-3',[1,2,3])->build(); Metrics::median('metric-4',[1,2,3])->build(); Metrics::avg('metric-5',[1,2,3])->build(); // to retrieve the metric data you can use the `getData()` function. $metric = Metrics::sum('metric-1',[1,2,3])->build(); print($metric->getData()) //result = 6//
要构建自定义度量,您可以使用以下 raw
度量
转换器将应用于输入数组的每个项目
$metric = Metrics::raw('name', [1, 2, 3]) ->setMeasure(fn ($data) => count($data)) ->build(); print($metric->getData()) //result = 3//
控件
此包最重要的组件是 Widgets
。为您预定义了多种类型的控件。
每个 Widget
有三个主要部分
- labels:用于自定义表格列名或轴名称等
- dimensions:用于定义您想要显示或绘制的数据
- metrics:在控件底部显示一些统计数据
表格控件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::table('users') ->labels(['ID', 'Name', 'mobile']) ->dimensions([ Dimensions::number('ids',[1,2,3]), 'names'=>['Ali', 'Hasan', 'Mohammad'], 'mobile'=>Dimensions::string('mob',["+01252**","+01252**","+01252**"]), ])->render() //with metrics Widgets::table('users') ->labels(['ID', 'Name', 'mobile']) ->dimensions([ Dimensions::number('ids',[1,2,3]), 'names'=>['Ali', 'Hasan', 'Mohammad'], 'mobile'=>Dimensions::string('mob',["+01252**","+01252**","+01252**"]), ])->metrics([ Metrics::count('total',[1,2,4]), 'average'=>Metrics::avg('avg',[1,2,4]) ])->render()
柱状图控件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::barChart('profits') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->metrics([ Metrics::sum('total',[100,200,300]), 'max-income'=>Metrics::max('avg',[100,200,300]), 'min-income'=>Metrics::min('avg',[100,200,300]) ])->render() //To make the bar chart horizontal, you can just add the following settings to the widget: Widgets::barChart('profits') ->labels(['2016', '2017', '2018']) ->settings(['direction'=>'y']) //// make the y axis as the base ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->metrics([ Metrics::sum('total',[100,200,300]), 'max-income'=>Metrics::max('avg',[100,200,300]), 'min-income'=>Metrics::min('avg',[100,200,300]) ])->render()
折线图控件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::lineChart('profits') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->render() //with metrics Widgets::lineChart('profits') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->metrics([ Metrics::sum('total',[100,200,300]), 'max-income'=>Metrics::max('avg',[100,200,300]), 'min-income'=>Metrics::min('avg',[100,200,300]) ])->render()
饼图控件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::pieChart('profits') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->render() Widgets::pieChart('profits of pos') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), ])->render()
环形图控件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::doughnutChart('profits') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), 'store-invoices'=>[150,110,250], Dimensions::number('extra',[10,20,30]), ])->render() Widgets::doughnutChart('profits of pos') ->labels(['2016', '2017', '2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,200,300]), ])->render()
散点图控件
& 气泡图控件
这两个图表非常相似。主要区别是气泡图将为每个数据点具有不同的半径。
这两个图表的默认行为是将第一个维度视为基础维度,然后将它与所有其他维度组合。
在以下示例中,pos-invoices
将与 store-invoices
组合,然后与 extra
依次组合
如果未定义标签,则包将组合维度名称,为每个数据集创建合适的命名。
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; Widgets::scatterChart('profits') ->labels(['POS To Store','POS to Extra']) ->dimensions([ Dimensions::number('pos-invoices',[100,110,120,130,140,160,200,250]), Dimensions::number('store-invoices',[100,200,300,210,300,400,450,600]), Dimensions::number('extra',[10,20,30,80,90,150,200,250]), ])->render() Widgets::bubbleChart('bubbles profits') ->labels(['POS To Store','POS to Extra']) ->dimensions([ Dimensions::number('pos-invoices',[100,110,120,130,140,160,200,250]), Dimensions::number('store-invoices',[100,200,300,210,300,400,450,600]), Dimensions::number('extra',[10,20,30,80,90,150,200,250]), ])->render()
极区图表小部件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; //single dimension Widgets::polarAreaChart('polar profits') ->labels(['2016 ','2017','2018']) ->dimensions([ Dimensions::number('pos-invoices',[100,110,120]), ])->render() //multi dimensions Widgets::polarAreaChart('polar profits (multi)') ->labels(['2016 ','2017','2018']) ->dimensions([ Dimensions::number('pos-invoices',[125,110,120]), Dimensions::number('store-invoices',[100,150,175]), Dimensions::number('extra',[150,110,150]), ])->render()
雷达图表小部件
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; //single dimension Widgets::radarChart('radar profits') ->labels(['2016 ','2017','2018','2019',2020]) ->dimensions([ Dimensions::number('pos-invoices',[125,150,180,190,200]), ])->render() //multi dimensions Widgets::radarChart('radar profits (multi)') ->labels(['2016 ','2017','2018']) ->dimensions([ Dimensions::number('pos-invoices',[125,110,120]), Dimensions::number('store-invoices',[100,150,175]), Dimensions::number('extra',[150,110,150]), ])->render()
数字小部件
此小部件用于表示与您的仪表板相关的某些统计数据。
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; //single dimension Widgets::number('expenses') ->labels(['Maintenance Expenses']) ->dimensions([ Dimensions::number('maintainance',[250]), ])->render() //multi dimensions Widgets::number('incomes') ->dimensions([ Dimensions::number('orders',[100000]), Dimensions::number('marketing',[1500]), 'social-media' => 6000 ])->render()
进度条小部件
此小部件用于表示与您的仪表板相关的某些统计数据。对于此小部件,您应指定以百分比表示的数字(最大值为100,最小值为0)
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; //single dimension Widgets::progressBar('expenses') ->labels(['Maintenance Expenses']) ->dimensions([ Dimensions::number('maintainance',[250]), ])->render() //multi dimensions Widgets::progressBar('incomes') ->dimensions([ Dimensions::number('orders',[100000]), Dimensions::number('marketing',[1500]), 'social-media' => 6000 ])->render()
地理地图小部件
对于此小部件,您需要指定要显示统计数据的国家。您可以使用iso2代码定义国家。
use Aldeebhasan\FastBi\Manager\{Metrics,Dimensions,Widgets}; //single dimension Widgets::geoMap('map') ->countries(['US','CA','FR','CN']) ->dimensions([ Dimensions::number('population',['150','200','300','400']), 'area'=>['1500','2000','3000','6000'], ])->render() //custom names Widgets::geoMap('map') ->countries(['US','CA','FR','CN']) ->labels(['Population','Square Area']) ->dimensions([ Dimensions::number('population',['150','200','300','400']), 'area'=>['1500','2000','3000','6000'], ])->render()
许可证
Fast-Bi软件包根据MIT许可证(MIT)授权。
安全联系信息
要报告安全漏洞,请直接联系开发者的联系邮箱这里。