理解报表数据模型:概述和查询设计

概述

报表数据模型是一个允许定制报表的维度模型。维度建模是一种数据仓库技术,它公开了围绕业务流程的信息模型,同时提供了生成报告的灵活性。报告数据模型的实现使用的是PostgreSQL关系数据库管理系统,版本为9.0.13。因此,在针对报表数据模型设计报表时,可以利用PostgreSQL的语法、函数和其他特性。

报表数据模型作为嵌入式关系模式可用,可以使用自定义报表模板对其进行查询。当将报表配置为使用自定义报表模板时,该模板将针对报表数据模型的一个实例执行,该实例使用与报表配置一起定义的设置确定范围并进行筛选。以下设置将指定在执行自定义报表模板期间可用的信息。

报告老板

报告的所有者决定了报告数据模型的暴露了哪些数据。报告所有者的访问控制和角色指定可以在报告中选择和访问的范围。

范围过滤器

作用域筛选器定义将在报告数据模型中公开哪些资产、资产组、站点或扫描。这些实体以及匹配的配置选项(如“仅使用最新扫描数据”)决定了在生成时哪些资产可用于报告。范围过滤器也在维度中公开,以允许设计器输出嵌入在报表中的信息,这些信息可以根据需要标识生成期间的范围。

漏洞过滤器

漏洞过滤器定义了在数据模型中暴露的漏洞(和结果)。在报告生成时间之前解释了三种类型的过滤器:

  1. 严重性:基于最小严重性级别过滤到报告中的漏洞。
  2. 类别:根据与漏洞相关的元数据将漏洞过滤到报告中或过滤出报告。
  3. 状态:根据结果状态将漏洞过滤到报告中。

查询设计

通过使用嵌入到自定义报表模板设计中的查询,可以访问报表数据模型中的信息。

维度建模

维度建模通过事实和维度的组合来呈现信息。事实是存储测量数据的表,通常是数值的,并具有可添加的属性。事实表以前缀“fact_”命名,表示它们存储的是事实数据。每个事实表记录都是在相同的粒度级别上定义的,这是事实的粒度级别。谷物指定了测量记录的水平。

维度是伴随测量数据的上下文,通常是文本的。维度表以前缀“dim_”命名,表示它们存储上下文数据。维度允许以对业务有意义的方式对事实进行切片和聚合。事实表中的每条记录都没有指定主键,而是定义了一组一对多的外键,这些外键链接到一个或多个维度。每个维度都有一个主键,用于标识可能被连接的相关数据。在某些情况下,维度的主键是多个列的组合。事实表和维度表中的每个主键和外键都是代理标识符。

正常化与关系

与传统的关系模型不同,维度模型支持反规格化,以减轻查询设计人员的负担并提高性能。每个事实及其相关维度组成了通常所说的“星型模式”。从视觉上看,事实表被多个维度表所包围,这些维度表可用于对事实进行切片或连接。在使用星型模式样式的完全非规范化维度模型中,事实和维度之间只有关系,但维度是完全自包含的。当维度没有完全去规范化时,它们可能与其他维度存在关系,当一个维度中存在一对多关系时,这种关系很常见。当这种结构存在时,事实和维度就构成了“雪花模式”。这两个模型都有一个共同的模式,即单一的中心事实表。当设计一个查询来解决业务问题时,只有一个模式(因此只有一个事实)应该使用。

事实表类型

存在三种不同类型的事实表:(1)事务表(2)累积快照和(3)周期快照。事务事实的粒度级别是在某个时间点发生的事件。事务事实识别伴随离散的动作、过程或活动的度量,这些动作、过程或活动是以不规则的间隔或计划执行的。累积快照事实将随时间或多个事件度量的信息聚合到单个合并度量中。该测量显示了谷物在某一水平上的当前状态。定期快照事实表提供按定期间隔(通常按天或日期)记录的度量。每条记录都测量了一个离散时刻的状态。

维度表类型

类型维度表通常根据它们提供的维度数据的性质进行分类,或者指示它们更新的频率(如果有的话)。

以下是尺寸模型中经常遇到的维度类型,以及报告数据模型使用的类型:

  • 慢慢改变维度(SCD).缓慢更改的尺寸是一个维度,其信息以非规则间隔缓慢变化。慢慢改变尺寸进一步按类型分类,这表明表格中记录变化的性质。报告数据模型中使用的最常见类型是I型和II型。
    • I型SCD会随着时间的推移覆盖尺寸信息的值,因此它累积当前信息状态和历史状态。
    • II类SCD随时间向维度中插入值,并累积历史状态。
  • 符合尺寸.一致性维度是由具有相同标签和价值的多个事实共享的维度。
  • 垃圾尺寸. 垃圾维度是那些不适合传统核心实体维度的维度。垃圾维度通常由标志或其他相关值组组成。
  • 正常维度.正常维度是没有标注在任何其他专门化类别中的维度。

空值&未知

在维度模型中,事实表中的外键使用NULL值是一种反模式。因此,当维度的外键不应用时,将在事实记录中放置该键的默认值(值为-1)。此值将允许对维度的“自然”连接检索“Not Applicable”或“Unknown”值。“Not Applicable”或“N/A”的值意味着该值不是为事实记录或维度定义的,并且永远不会有一个有效值。“Unknown”的值表示无法确定或评估该值,但可以有一个有效值。这种做法鼓励在事实与其相关维度之间进行连接时使用自然连接(而不是外部连接)。

查询语言

由于报表数据模型公开的维度模型构建在关系数据库管理系统上,访问事实和维度的查询是使用结构化查询语言(SQL)编写的。可以利用PostgreSQL DBMS支持的所有SQL语法。星型或雪花型模式设计的使用鼓励在大多数查询中使用可重复的SQL模式。这种模式如下所示:

尺寸模型查询的典型设计

选择列,列,...

从fact_table

在维度\u表上联接维度\u表。主\u键=事实\u表。外部\u键

加入 ...

哪里dimension_table.column =某些条件......

...以及其他SQL构造,如GROUP BY、HAVING和LIMIT。

SELECT子句投影需要返回的所有数据列,以填充或填充报表设计的各个方面。该子句可以使用聚合表达式、函数和类似的SQL语法。FROM子句是通过首先从单个事实表中提取数据,然后对周围维度执行联接来构建的。通常,仅需要自然连接才能根据标注进行连接,但可能需要根据具体情况进行外部连接。针对维度模型的查询中的WHERE子句将根据过滤器是数字的还是文本的,从事实或维度的数据中过滤条件。

从查询返回的列的数据类型将是PostgreSQL DBMS支持的任何类型。如果查询中投影的列是维度的外键,并且没有适当的值,则将根据数据类型使用sentinel。根据尺寸,这些值表示不适用或未知。如果数据类型不支持转换为文本“Unknown”或类似的sentinel值,则将使用NULL。

数据类型

未知的价值

文本

'未知'

Macaddr.

空值

inet

空值

性格,性格多变

“- - -”

长整型数字、整数

-1

查询的第一行不能是SQL注释。查询中使用的任何SQL注释不得包含分号。

数据模型2.0.0公开了有关跨站点链接资产的信息。以前的所有信息仍然可用,格式相同。从数据模型2.0.0开始,存在网站dim_资产维度中列出资产所属站点的列。