原文地址:https://developer.piwik.org/guides/data-model

此文中的内容和《Piwik数据库模式(一)》中相互参照

日志数据

HTTP跟踪API(即Piwik\Tracker组件)接收原始分析数据,我们称之为日志数据。

有四种类型的日志数据:

  • 访问
  • 动作类型
  • 转换
  • 电子商务项目

归档过程将日志数据聚合到归档数据中。

日志数据从不直接用于Piwik报告,而是使用归档数据。唯一的例外是使用日志数据生成实时报告的Live插件。

持久化

日志数据在PHP中表示为Piwik\Tracker\Visit对象,并存储到下表中:

log_visit 每次访问包含一个条目(返回访问者) log_action 包含网站上所有可能采取的行动(例如,唯一网址,网页标题,下载网址...) log_link_visit_action 每个行动的访客包含一个条目(页面浏览,...) log_conversion 包含访问期间发生的转化(与目标相符的操作) log_conversion_item 包含电子商务转换项目 这些表(及其相关的PHP实体)的内容将在“ 数据库架构”指南中进行更详细的介绍。

存档过程

日志数据不能直接用于最终用户报告,因为它需要在每次需要报告时处理大量的数据。

为了解决这个问题,归档过程将日志数据聚合到归档数据中。然后使用归档数据构建报告。

我们举一个例子,在一天内收到1000页浏览量的网站。该日志数据将与其他信息,例如,沿着这1000个的事件列表:

URL         Time     ...
/homepage   17:00:19 ...
/about      17:01:10 ...
/homepage   17:05:30 ...
/categories 17:06:14 ...
/homepage   17:10:03 ...
...

该归档过程汇总这些原始数据到归档数据。

例如,要构建每页视图数量的报告(查看最受欢迎的页面),归档将列出所有页面并总计每个页面的视图数量:

URL         Page views
/homepage   205
/categories 67
/about      5
...

该数据是归档数据。

虽然预计算档案数据对于1000页浏览量来说似乎是多余的,但是在处理较高数据量时并不是这样。

什么时候?

默认情况下,归档数据的计算和缓存点播。当请求具体报告时,Piwik将检查所需的存档数据是否存在,如果不存在则生成。

预归档 当跟踪网站流量很大时,按需归档可能需要太多时间。在这种情况下,必须禁用存档归档,并且预先归档需要在预定时间内在后台运行。

可以使用core:archiveconsole命令为每个站点和期间(自定义日期范围除外)运行预归档:

$ ./console core:archive

通常的设置是使用固定间隔运行该命令cron。

该命令将记住上次执行时,只有存在新的访问时才会存档网站。

怎么样?

日志数据被汇总到每个的归档数据中:

  • 现场
  • 期间:日,周,月,年或自定义日期范围(自定义日期范围不能预先归档)
  • 分割 存档逻辑(即聚合日志数据的方式)由插件定义。由插件定义的所有报告都将归档而不是单独存档。

如果查询中没有分段,找不到数据,则每个插件的每个报告将一次生成并缓存。如果提供了一个段,则将生成和缓存属于与请求的数据相同的插件的报告。

期间聚合 归档数据的计算方式根据期间类型不同:

  • “日”期是日志数据的聚合
  • “周”,“月”,“年”和自定义日期范围是“日”报告的汇总 例如,通过聚合一周中的7天的归档数据创建一周的归档数据。这比聚合日志数据要快得多。
插件存档

要归档报表和指标的插件定义了一个Archiver扩展的类Piwik\Plugin\Archiver。此类将在归档过程中自动检测并调用。

日志数据聚合由LogAggregator类处理。归档数据聚合由ArchiveProcessor::aggregateDataTableRecords()and ArchiveProcessor::aggregateNumericMetrics()方法处理。

插件可以访问LogAggregator和ArchiveProcessor实例Piwik\Plugin\Archiver。

要了解有关Piwik的MySQL后端如何实现聚合的更多信息,请阅读数据库模式。

持久存档数据

存档数据使用ArchiveProcessor。

使用度量标准插入insertNumericRecord()。

报告首先使用序列化DataTable::getSerialized(),然后插入ArchiveProcessor::insertBlobRecord():

// insert a numeric metric
$myFancyMetric = // ... calculate the metric value ...
$archiveProcessor->insertNumericRecord('MyPlugin_myFancyMetric', $myFancyMetric);

// insert a record (with all of its subtables)
$maxRowsInTable = Config::getInstance()->General['datatable_archiving_maximum_rows_standard'];j

$dataTable = // ... build by aggregating visits ...
$serializedData = $dataTable->getSerialized(
    $maxRowsInTable,
    $maxRowsInSubtable = $maxRowsInTable,
    $columnToSortBy = Metrics::INDEX_NB_VISITS
);

$archiveProcessor->insertBlobRecords('MyPlugin_myFancyReport', $serializedData);

持续的报告和指标由网站ID,期间和分段索引。归档的日期和时间也附在数据上。要了解MySQL如何完成此细节,请参阅数据库架构。

报告与记录

当报告被归档时,它被称为不是报告的记录。我们有区别,因为有时可以从一个记录生成多个报告。

例如,UserSettings插件使用一个记录来保存访问者的浏览器详细信息。此记录用于生成UserSettings.getBrowserVersion和UserSettings.getBrowser报告。第二份报告只是处理第一份报告。该插件可以归档这两个报告,但是这将大大浪费空间,考虑到新的报告将被缓存为每个网站/期间/段组合。

记录存储准则

必须注意尽可能少的存放记录。在将记录作为归档数据插入之前,请务必遵循以下准则: 记录不应与字符串列名一起存储。相反,它们应该被替换为整数列ID(有关现有列表的列表,请参阅Metrics)。 可以使用现有数据添加的元数据不应与报告一起存储。相反,当将记录转换为报告时,应将其添加到API方法中。

归档数据

归档数据是在创建归档过程中通过汇总日志数据。

Piwik聚合并持续存在两种类型的存档数据:

度量,它们是单个数值
报告,是二维数组的值

报告通常包含指标值,但它们也可以包含其他数据(额外地或代替度量值)。

报告和指标由插件定义,允许任何插件扩展Piwik分析的数据。然而,有几个称为核心指标的指标,由Piwik Core定义。

子集参数

报告和指标提供关于一组事物的分析数据。该集合由三个约束定义:

一个网站ID
一段时间
一段

该网站的ID选择被跟踪特定网站的访问。该ID在具有idSitequery参数的所有HTTP请求中指定。

的期间,选择被跟踪的特定日期范围内的访问。所有HTTP请求中指定的时间段date与period查询参数。

该段根据使用访问属性的布尔表达式选择访问。它在所有HTTP请求中由segmentquery参数指定,可用于选择几乎任何可能的访问子集。

Analytics(分析)参数作为元数据存储在报表中,这意味着它们作为DataTable元数据存储。

度量

核心指标 核心指标是不是由插件定义的,而是Piwik Core。

分析访问次数,操作类型或转化次数的新报告应包含这些指标。

访问指标

一组访问的核心指标:

名称 公制编号 描述
访问 nb_visits 跟踪访问次数 一次访问是一系列事件,每次事件发生不超过30分钟。
独特的访客 nb_uniq_visitors 唯一访问来源的数量。访问来源是一个导致访问的实体。
操作 nb_actions 跟踪的动作数量。一个行动是Piwik跟踪的一个事件。
最大行动 max_actions 一次访问中发生的最大操作次数。
总访问长度 sum_visit_length 每次访问的总和时间。
反弹计数 bounce_count 仅由一个动作组成的访问次数。
转换访问 nb_visits_converted 导致至少一次转化的访问次数。包含网站每个目标的转化。
转换 nb_conversions 此次访问跟踪的转化次数。包含网站每个目标的转化。
收入 revenue 这些访问产生的总收入。 包括网站的每个目标的收入以及电子商务收入。
行动指标

单一动作类型的核心指标:

名称 公制编号 描述
点击 nb_hits 这个动作曾经完成的次数。
总和花费时间 sum_time_spent 用户花费这个操作的总时间。
总和页面生成时间 sum_time_generation 服务器花费这项操作的总时间。
点击与生成时间 nb_hits_with_time_generation 包含生成时间信息的命中数。
最小页面生成时间 min_time_generation 服务器为此操作服务的最短时间。
最大页面生成时间 max_time_generation 服务器花费此操作的最长时间。
独特出境游客 exit_nb_uniq_visitors 在此行动之后退出网站的唯一身份访问者人数。
退出访问 exit_nb_visits 通过此操作结束的总访问次数。
独特的入场访客 entry_nb_uniq_visitors 通过此操作开始访问的唯一身份访问者总数。
入场访问 entry_nb_visits 以此操作开始的总访问次数。
进入动作 entry_nb_actions
入场和访问长度 entry_sum_visit_length 每次入场访问的总和经过时间。
入场反弹计数 entry_bounce_count 由这个动作组成的访问次数,没有其他。
点击搜索 nb_hits_following_search 在网站搜索后执行此操作的次数。
电子商务指标

针对一组访问记录的一组电子商务转换(所有订单或所有已放弃购物车)的核心指标:

名称 公制编号 描述
收入小计 revenue_subtotal 作为这些订单或弃车的一部分的每个项目的总成本。
税收收入 revenue_tax 适用于这些订单/弃车的总税额。
收入运费 revenue_shipping 运送到这些订单/废弃车的运输总量。
收入折扣 revenue_discount 这些订单/弃车的折扣总额。
电子商务计数 items 这些订单/弃车的物品总数。
目标指标

一组访问的核心指标和网站的一个目标:

名称 公制编号 描述
目标转换 goal__nb_conversions 针对特定目标跟踪此次访问的转化。
目标收入 goal__revenue 特定目标的转化所产生的总收入。

注意:应替换为目标的ID。

目标具体指标存储在goals序列化报告列中的数据库中。该列包含一个PHP数组,将目标ID与目标特定度量值的数组进行映射。这些值被设置为具有上述由AddColumnsProcessedMetricsGoal DataTable过滤器描述的度量名称的普通列值。

已处理的指标

为了归档和数据库大小的效率,一些指标不存储在数据库中。而是在需要时使用其他指标来计算。这些指标称为处理指标。

以下是使用核心指标计算的已处理指标列表。分析访问次数,操作类型或转化次数的新报告应尽可能添加这些指标。

注意:以下列表中会显示多个已处理的指标。这些指标根据他们所在的报告有不同的含义。

一组访问的处理指标:

名称 公制编号 描述
兑换率 conversion_rate 至少有一次转化的访问百分比。
每次访问行动 nb_actions_per_visit 单次访问的平均动作次数。
平均停机时间 avg_time_on_site 平均每次访问所花费的时间(秒)。
跳出率 bounce_rate 导致反弹的访问百分比。

单个操作类型的已处理指标:

名称 公制编号 描述
平均生成时间 avg_time_generation 服务器提供此操作所需的平均时间。
浏览的平均搜索结果页数 nb_pages_per_search 在网站搜索后查看的搜索结果页的平均数量。仅适用于网站搜索关键字和网站搜索类别。
平均时间页 avg_time_on_page 用户花费这个时间的平均时间。
入场跳出率 bounce_rate 所有访问的百分比组成的这个动作,没有其他。
退出率 exit_rate 以此动作结束的所有访问的百分比。

针对一组访问记录的电子商务订单集的处理指标:

名称 公制编号 描述
平均订单收入 avg_order_revenue 每个订单的平均收入。

一组订单或废弃购物车中电子商务集合的处理指标:

名称 公制编号 描述
平均价格 avg_price 每个项目的平均价格。
平均数量 avg_quantity 订单/已放弃购物车中每个商品的平均数量。
产品转化率 conversion_rate 包含此项目的订单/弃车的百分比。

以下是一个特定于一个网站的一个目标的已处理指标列表:

名称 公制编号 描述
每次访问平均收入 goal__revenue_per_visit 为此目标每次访问所产生的平均收入金额。
命名约定

由插件计算和持久化的度量必须使用以下格式命名:PluginName_metricName。例如:MyPlugin_myFancyMetric。

核心指标具有特殊名称,不符合此惯例。

报告

报告使用DataTable类存储在内存中。A DataTable是由行和列组成的二维数组。

每行都包含与一组访问,操作,转换相关的度量...该集合由特殊标签列定义和描述。列描述的集合完全取决于具体的报告。例如,在UserSettings.getBrowser报告中,带有Firefox标签的行将包含使用Firefox浏览器的访问指标。

一些报告VisitsSummary.get就不会有一个标签列:它们只有一行引用整个实体集。

报告元数据

除了指标之外,每一行还可以包含元数据。这个元数据通常会帮助标签列描述行代表的事物集。

一些元数据在Piwik有特殊的含义,例如:

logo:该值可以是将在UI中的每一行旁边显示的图像的路径
url:该值可以是该行将在UI中链接到的URL
子表

报表可以是层次结构的:每行都可以附加到另一个DataTable。附加到行的表称为子表。

子表为行所代表的一组访问提供进一步的分析。例如,Referrers.getSearchEngines报告每个搜索引擎有一行。每行都有一个子表,描述与该搜索引擎一起使用的关键字。以下是一个示意图:

Search Engine  Keyword (subtable)  Visitors
--------------|-------------------|----------
Google                            | 207
--------------|------------------------------
              | piwik             | 11
              | libre analytics   | 6
              | ...
---------------------------------------------
Duck Duck Go                      | 121
--------------|------------------------------
              | ...
命名约定

必须将报告命名为指标如下:PluginName_reportName。例如:MyPlugin_myFancyReport。

results matching ""

    No results matching ""