数据表用于存储报表数据。可视化决定如何在UI中显示这些表,并且可以使用HTTP报表API(json, xml, csv,…)
数据表看起来就像一个普通的表:
一个基本的例子如下:
$table = new DataTable();$table->addRowsFromSimpleArray(array(array('label' => 'thing1', ' nb_访问量' => 1,'nb_actions' => 1), array('label' => 'thing2', ' nb_访问量' => 2,'nb_actions' => 2)));foreach ($table->getRows()作为$row) {foreach ($row->getColumns()作为$column => $value) {echo $column。': '。美元价值;//表也实现了ArrayAccess接口,因此也可以工作:foreach ($table as $row) {foreach ($row as $column => $value) {echo $column。': '。美元价值;}}
有三种不同类型的数据表:
时间=日期与星期= last7
).方法迭代映射中的每个表getDataTables ()
方法。每个表的数组键存储子表所代表的日期。“map”数据表还可以包含其他数据表映射。每个表可以存储多个行.
可以以任何方式操作数据表过滤器,它们只是操作在数据表
实例:
表- >过滤器()
-立即执行过滤器。根据过滤器的作用,它也可以应用于子表,也可以不应用于子表。表- > filterSubtables ()
-立即执行过滤器。过滤器不会在这个数据表中的行上执行,而只在子表上执行。表- > queueFilter ()
-类似于filter ()
但是只有在删除了所有不需要的行之后才会执行。表- > queueFilterSubtables ()
-类似于filterSubtables ()
但是只有在删除了所有不需要的行之后才会执行。排队过滤器可以加快过滤器的速度,使Matomo更快。例如,如果只请求了10行,那么过滤器将只对10行执行,而不是可能的数百或数千行。只要可能,我们尝试使用队列过滤器,但这并不总是可能的,因为有时某些过滤器需要在其他过滤器运行之前执行。
注意,队列筛选器仅在以下情况下应用表- > applyQueuedFilters ()
被称为。这是由Matomo core自动完成的,除非有URL查询&disable_queued_filters = 1
在API调用中设置,这在一些罕见的情况下可能会发生。
中可以找到内置示例的列表API类参考当你搜索“DataTable\Filter”时。要应用内置过滤器,要么指定完整的类名,包括命名空间,要么只指定类名本身:
表- >过滤器(“截断”);表- >过滤器(Piwik \ DataTable \滤波器\截断);表- >过滤器(Piwik \ DataTable \ \截断过滤::类);
一些过滤器需要额外的参数,这些参数可以作为参数提供:
$table->filter('Limit', [5,10]);// group url by host $table->filter('GroupBy', ['label', function ($labelUrl) {return parse_url($labelUrl, PHP_URL_HOST);}));
对于各种可能的操作,有许多内置的过滤器。如果您需要操作数据表,例如添加,删除或更改列或元数据或其他操作,我建议您在参考.其中大多数都有关于需要什么参数的文档,并显示了示例。
类的扩展,也可以创建自己的筛选器BaseFilter
类:
名称空间Piwik编写MyPlugin \ DataTable \ \ Plugins \滤波器;使用Piwik \ DataTable \ BaseFilter;使用Piwik \数据表;类ShortenUrl扩展BaseFilter{公共函数过滤器($table) {foreach ($table->getRows()作为$row) {$label = $row->getColumn('label');行- > setColumn(“标签”,(“https大小写不敏感 ://', '', $ 标签);行- > setMetadata(“url”,美元标签);}}}
然后你可以使用类名执行这个过滤器:表- >过滤器(Piwik编写MyPlugin \ DataTable \ \ Plugins \ \ ShortenUrl过滤::类)
.
如果你想要接受参数,你可以像这样在构造函数中要求它们:
类ShortenUrl扩展BaseFilter {private $protocolToRemove;公共函数__construct($table, $protocolToRemove) {parent::__construct($table);$this->protocolToRemove = $protocolToRemove;}公共函数过滤器($table) {foreach ($table->getRows() as $row) {$label = $row->getColumn('label');$row->setColumn('label', str_replace($this->protocolToRemove, ", $label));行- > setMetadata(“url”,美元标签);}}}
第一个参数总是自动传递给类的表。类时需要提供所有其他参数过滤器
方法:表- >过滤器(Piwik编写MyPlugin \ DataTable \ \ Plugins \ \ ShortenUrl过滤::类,[' https:// '])
.
在一个数据表中可以存在两个特殊行:
SummaryRow
—当一个报告被截断时,所有其他被删除的行通常被聚合到“汇总行”中,并使用“其他”标签显示。例如,您正在查看前500个页面url,那么所有其他没有进入前500行的url将被聚合到摘要行中。TotalsRow
—该行包含数据表中所有行的聚合值。在Matomo UI中,您可以使用齿轮图标查看汇总行。每一行都可以选择存储一个子表,以表示类似树的结构。例如,一个Page URL报告可以是这样的:
在本例中,“shop”行将有一个包含两行的子表。属性可以访问这些子表行- > getSubtable ()
方法。
我建议你去看看DataTable API参考获取已存在的所有方法的列表。
有很多方法可以排序、删除、添加行和元数据。还有一些更高级的方法可以将多个数据表合并为一个或多个。