kabachello / phpolapi
一个用于连接OLAP数据库的PHP API
2.0.2
2019-12-27 14:31 UTC
Requires (Dev)
- phpunit/phpunit: 3.7.*
README
功能
- 通过XMLA执行MDX语句
- 将结果数据作为关联数组在PHP中使用
- 通过插件渲染器将结果转换为其他结构:例如HTML表格、CSV等
- 通过MDX查询构建器以面向对象风格创建MDX查询
- 探索数据库模式(立方体、维度、层次结构、级别等)。
phpOLAPi是Julien Jacottet的phpOLAP的分支,遗憾的是它不再维护。
安装
composer require kabachello/phpolapi
phpOLAPi在PHP 5.3.2及以上版本上运行。
连接
<?php require_once 'vendor/autoload.php'; use phpOLAPi\Xmla\Connection\Connection; use phpOLAPi\Xmla\Connection\Adaptator\SoapAdaptator; // for Mondrian $connection = new Connection( new SoapAdaptator('http://localhost:8080/mondrian/xmla'), [ 'DataSourceInfo' => 'Provider=Mondrian;DataSource=MondrianFoodMart;' 'CatalogName' => 'FoodMart', 'schemaName' => 'FoodMart' ] ); // for Microsoft SQL Server Analysis Services $connection = new Connection( new SoapAdaptator('http://localhost/olap/msmdpump.dll', 'username', 'password'), [ 'DataSourceInfo' => null, 'CatalogName' => 'Adventure Works DW 2008R2 SE' ] );
注意:在开始之前,请确保您的数据库提供XMLA web服务。某些OLAP引擎(如Mondrian)默认支持XMLA,而其他则需要执行额外操作 - 例如,这里提供了向Microsoft Analysis Services添加XMLA web服务的官方说明。
运行MDX查询
// Connect as shown above $connection = ... // Execute MDX statement $resultSet = $connection->statement(" SELECT [Measures].MEMBERS ON COLUMNS FROM [Adventure Works] "); // Transform to associative array $renderer = new \phpOLAPi\Renderer\AssocArrayRenderer($resultSet); $array = $renderer->generate();
通过API构建MDX查询
use phpOLAPi\Mdx\Query; $query = new Query("[Sales]"); $query->addElement("[Measures].[Unit Sales]", "COL"); $query->addElement("[Measures].[Store Cost]", "COL"); $query->addElement("[Measures].[Store Sales]", "COL"); $query->addElement("[Gender].[All Gender].Children", "COL"); $query->addElement("[Promotion Media].[All Media]", "ROW"); $query->addElement("[Product].[All Products].[Drink].[Alcoholic Beverages]", "ROW"); $query->addElement("[Promotion Media].[All Media].Children", "ROW"); $query->addElement("[Product].[All Products]", "ROW"); $query->addElement("[Time].[1997]", "FILTER"); $connection = ... $resultSet = $connection->statement( $query->toMdx() );
使用ResultSet渲染器
查询的结果是一个ResultSet
实例,它模拟XMLA响应的复杂结构。渲染器有助于提取实际数据,这些数据隐藏在XML深处。在上面的第一个例子中,我们使用了AssocArrayRenderer
将ResultSet
转换为关联数组。但还有其他渲染器,您也可以构建自己的!
use phpOLAPi\Renderer\Table\HtmlTableRenderer; use phpOLAPi\Renderer\Table\CsvTableRenderer; use phpOLAPi\Renderer\AssocArrayRenderer $connection = ... $resultSet = $connection->statement(" SELECT { [Measures].[internet Sales Amount], [Measures].[Internet Order Quantity] } ON COLUMNS, { [Date].[Calendar].[Calendar Year].[CY 2006], [Date]. [Calendar].[Calendar Year].[CY 2007] } ON ROWS FROM [Adventure Works] WHERE ([Customer].[Customer Geography].[Country].[Australia]) "); // Associative array (similar to the result of SQL queries) $array = (new AssocArrayRenderer($resultSet))->generate(); var_dump($array); // HTML table $tableRenderer = new HtmlTableRenderer($resultSet); echo $tableRenderer->generate(); // CSV header("Content-type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=\"export.csv\""); $csv = new CsvTableLayout($resultSet); print($csv->generate());
数据库探索
<?php $connection = ... $cube = $connection->findOneCube(null, array('CUBE_NAME' => 'Sales')); ?> <p><label>Cube :</label> <?php echo $cube->getName() ?></p> <ul id="cubeExploration"> <li class="measure"> Measures <ul> <?php foreach ($cube->getMeasures() as $measure): ?> <li><?php echo $measure->getCaption() ?></li> <?php endforeach ?> </ul> </li> <?php foreach ($cube->getDimensionsAndHierarchiesAndLevels() as $dimention): ?> <?php if($dimention->getType() != 'MEASURE') : ?> <li> <?php echo $dimention->getCaption() ?> <ul> <?php foreach ($dimention->getHierarchies() as $hierarchy): ?> <li> <?php echo $hierarchy->getCaption() ?> <ul> <?php foreach ($hierarchy->getLevels() as $level): ?> <li> <?php echo $level->getCaption() ?> </li> <?php endforeach ?> </ul> </li> <?php endforeach ?> </ul> </li> <?php endif; ?> <?php endforeach ?> </ul>
许可证
phpOLAPi在MIT许可证下发布。