数据表

数据表用于存储报表数据。可视化决定如何在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。': '。美元价值;}}

不同类型的数据表

有三种不同类型的数据表:

  • 数据表—有维度的报表的常规数据表。在这种情况下,每行通常都有一个“标签”列用于该行的相关维值。
  • DataTable \简单-用于没有维度的报告。在这种情况下,没有“标签”列,它只存储指标的数据。这样的表通常只有一行。
  • DataTable \地图—当请求多个周期时,存储一组常规或简单的数据表时间=日期与星期= 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报告可以是这样的:

  • /店
    • / product1
    • / product2
  • /博客

在本例中,“shop”行将有一个包含两行的子表。属性可以访问这些子表行- > getSubtable ()方法。

其他数据表方法

我建议你去看看DataTable API参考获取已存在的所有方法的列表。

有很多方法可以排序、删除、添加行和元数据。还有一些更高级的方法可以将多个数据表合并为一个或多个。

Baidu