5

我正在寻找一个基于 Web 的报告框架,它基于 PHP 并与 MySQL 一起使用。

这是我的问题(除了我懒得自己编程之外):我有一个大型(50k+ 行)表,用于存储多个客户端的日志数据。这些客户需要能够分类和搜索并完成所有这些宏伟的事情。

我真的很喜欢它背后有相当大的力量的东西,这就是为什么我担心自己建造一个。这不是一个足够大的需求,值得投入大量时间,但它是我的客户的必要功能。

理想情况下,我想要某种框架,我既可以传递数据,也可以使用模板引擎获取数据本身(因此它会完成所有演示)。我可以获得呈现的演示文稿并将其放入我的网站。

这么好的东西可能不存在,但也许我会很幸运。

4

6 回答 6

5

你可以试试KoolReport

免责声明:我正在做这个项目。

它是一个 php 报告框架,正是您所寻找的。您可以通过网站下载框架,从github克隆项目或使用composer安装:composer require koolphp/koolreport.

安装后,这里是创建销售报告的基本示例

index.php: 这是引导文件

<?php
require_once "SalesByCustomer.php";
$salesByCustomer = new SalesByCustomer;
$salesByCustomer->run()->render();                  

SaleByCustomer.php: 这个文件定义了数据连接和数据处理

<?php

require_once "koolreport/autoload.php";
use \koolreport\processes\Group;
use \koolreport\processes\Limit;
use \koolreport\processes\Sort;


class SalesByCustomer extends \koolreport\KoolReport
{
    public function settings()
    {
        return array(
            "dataSources"=>array(
                "sales"=>array(
                    "connectionString"=>"mysql:host=localhost;dbname=db_sales",
                    "username"=>"root",
                    "password"=>"",
                    "charset"=>"utf8"
                )
            )
        );
    }

    public function setup()
    {
        $this->src('sales')
        ->query("SELECT customerName,dollar_sales FROM customer_product_dollarsales")
        ->pipe(new Group(array(
            "by"=>"customerName",
            "sum"=>"dollar_sales"
        )))
        ->pipe(new Sort(array(
            "dollar_sales"=>"desc"
        )))
        ->pipe(new Limit(array(10)))
        ->pipe($this->dataStore('sales_by_customer'));
    }
}

SalesByCustomer.view.php:这是您可以将数据可视化的视图文件

<?php 
    use \koolreport\widgets\koolphp\Table;
    use \koolreport\widgets\google\BarChart;
?>

<div class="text-center">
    <h1>Sales Report</h1>
    <h4>This report shows top 10 sales by customer</h4>
</div>
<hr/>

<?php
    BarChart::create(array(
        "dataStore"=>$this->dataStore('sales_by_customer'),
        "width"=>"100%",
        "height"=>"500px",
        "columns"=>array(
            "customerName"=>array(
                "label"=>"Customer"
            ),
            "dollar_sales"=>array(
                "type"=>"number",
                "label"=>"Amount",
                "prefix"=>"$",
            )
        ),
        "options"=>array(
            "title"=>"Sales By Customer"
        )
    ));
?>
<?php
Table::create(array(
    "dataStore"=>$this->dataStore('sales_by_customer'),
        "columns"=>array(
            "customerName"=>array(
                "label"=>"Customer"
            ),
            "dollar_sales"=>array(
                "type"=>"number",
                "label"=>"Amount",
                "prefix"=>"$",
            )
        ),
    "cssClass"=>array(
        "table"=>"table table-hover table-bordered"
    )
));
?>

这是结果

基本上,您可以同时从多个数据源获取数据,将它们通过流程传输,然后将结果存储到数据存储中。然后数据存储中的数据将在视图中可用以进行可视化。Google Charts集成在框架内,因此您可以立即使用它来创建漂亮的图表和图形。

好的,这里有一些很好的链接:

  1. KoolReport 高级示例:查看更多优秀示例
  2. Doc - 数据源:支持 MySQL、Oracle、SQLServer、MongoDB、CSV、Microsoft Excel ..
  3. Doc - 数据处理:数据分析和转换
  4. Doc - 数据可视化:使用图表、表格等将您的数据可视化。
  5. Github 上的项目

希望有帮助。

于 2017-05-18T09:24:59.573 回答
1

PHPRunner - PHP 代码生成器

也有这个,但我不知道你是否希望它是免费的。

还有这个跨平台报告工具(不在 PHP 中)。

于 2011-03-25T10:03:16.440 回答
1

我找到了一个很好的替代品,非常适合我的需求:一个名为laiguExtGridPlugin的 Symfony 插件。它不是一个框架,但它使用 JSON 调用来获取数据并通过排序和分页显示它。我还没有真正实现它,今晚我将阅读源代码,看看如何做到这一点——关于插件的文档很少,去看看吧。一旦我实现它,我最终会在我的博客上发布一些东西。

更新: laiguExtGridPlugin 已经实现,但它位于一个名为ext的 Javascript 库之上。这个库很大,超过 27 兆。这是完整的图书馆。我使用的部分大约是 100KB。我也使用 jQuery,所以这两个库的加载(谢天谢地,它只适用于一页)是非常不可接受的。我将切换到基于 jQuery 的网格系统。

我还从 Trirand 找到了一个名为jqGrid的商业许可 jQuery 插件。带有订阅、源和优先支持的单机许可证 599 美元或仅许可证 450 美元,这有点超出我的价格范围。但是,它看起来确实不错,让我想起了新的 Msoft Office UI。

现在前者会做得很好;但是,我将四处寻找一个框架。我可以自己做一个。

于 2011-03-25T23:40:09.820 回答
1

这可以简单地在Agile Toolkit中完成,它还集成了 jQuery 和 AJAX。

1.git克隆git://github.com/atk4/atk4.git

(或者你可以下载一个包)

2.config.php:

<?php     
$config["atk"]["base_path"]="./atk4/";
$config["dsn"]='mysql://root:root@localhost/project';
$config['url_postfix']='.php';

3.index.php:

<?php
include'atk4/loader.php';
class MyApp extends ApiFrontend {
    function init(){
        parent::init();
        $this->add('jUI');
        $this->add('BasicAuth')->allow('demo','demo')->check();
        $this->add('Menu',null,'Menu')
            ->addMenuItem('report','index')
            ->addMenuItem('logout');
    }
    function page_index($p){
        $this->dbConnect();

        $f=$p->add('Filter',null,null,array('form_empty'));
        $f->addField('line','name');
        $f->addField('line','surname');
        $f->addSubmit('Search');

        $g=$p->add('Grid');
        $g->setSource('user');
        $g->addColumn('text','gender')->makeSortable();
        $g->addColumn('text','name')->makeSortable();
        $g->addColumn('text','surname')->makeSortable();
        $g->addPaginator(25);

        $f->useDQ($g->dq);
    }
}

$api=new MyApp('myapp');
$api->main();

功能包括:分页、排序、过滤,您可以自定义所有内容。敏捷工具包有大量的文档和学习书籍。

您可以使用 u: demo, p: demo 登录

于 2011-03-26T08:34:17.060 回答
1

如果您还没有,我会尝试一下 Roman 的建议。敏捷工具包的所有内容都在 6MB 以下,并且只加载页面中您需要的部分,但他在上面的代码中提供的示例是您创建显示表格数据的网格所需的全部内容。

setSource 行确定将从 mysql 获取哪个表,在本例中为“用户”表

  $g->setSource('user');

如果您需要对返回的行实施一些限制,而不是让用户过滤它们,例如只列出人,您可以添加

  $g->addCondition('gender','M');

我认为 atk4-addons 目录中还有一些 MVCGrid 的导出选项,因此您可以在网格中添加 Excel 或 PDF 导出数据,尽管我自己还没有时间探索这些选项 - 只是注意到 export.php 在插件目录。

于 2011-09-17T02:14:08.110 回答
0

我相信有很多工具可以帮助你:

https://mysqlreportsengine.com
PHP 中的报告框架,具有易于遵循的 API,您可以从代码中调用该 API 以生成 MYSQL 报告。

https://mydbr.com:可以帮助您将 SQL 查询转换为专业报告

https://mysqlreports.com:向导式界面,可以帮助您为 MySQL 创建 PHP 报告(您可以搜索和排序)它确实支持会员登录

于 2016-04-01T20:51:56.720 回答