# 维度表

## **概述**

通过维度表，我们可以更加便捷高效、自由灵活地为埋点事件扩展新的事件属性。

换言之，对于一些在埋点时没有上报的事件属性，可以通过维度表来补充到方舟系统中，以用于实现更多维度和更加深入的分析应用。

#### 举例来说：

方舟 SDK 会默认采集用户使用 App 时的地理位置信息，包括IP、国家、省份和城市，所以我们才能够在方舟中基于这些维度进行细分、条件筛选等操作，从而进行相应的分析查询。

而对于某些业务来说，除了常规的地域维度外，我们可能还需要通过销售区域维度（如华北区、华南区等）来进行统计分析。

在不使用维度表的情况下，为了满足这个需求，必须先通过埋点的方式将“销售区域”上报到方舟系统中。

而现在，利用维度表，我们不必埋点就能“采集”到这部分数据，从而实现同样的分析需求。

#### 另外一个常见的应用场景：

就是为商品或产品等 Item 实体扩充更多的属性信息。

对于一件商品而言，通常会有商品ID、商品名称、一级类目、二级类目、品牌、型号、尺寸、颜色、商品标签等等非常多的属性信息。

假如我们在最初埋点时，只上报了少部分商品属性，那么之后，当我们对其他维度产生分析需求时，就可以通过维度表来补充更多的属性用于分析。

实际上，维度表的灵活性非常高，我们可以通过维度表对基于埋点上报的任何事件来进行属性扩展。

## **维度表功能原理**

维度表的工作原理类似Excel 的 VLOOPKUP 函数，以及 SQL 中的 LEFT JOIN 操作。·&#x20;

我们以上述销售区域维度扩展的场景为例，通过一个简单的示例，来解释维度表的工作原理。

理解维度表，需要从事件表说起。

我们知道，通过埋点，方舟能够采集到信息维度（即事件属性）非常丰富的用户行为数据。

在一个项目中，所有用户的行为数据，都会被记录在一张“数据表”中，这张表即为“事件表”。

我们可以将事件表理解为一张由行和列组成的表格。表格中，一行数据即为一条事件记录，描述了一个用户的一次行为。一条事件记录由若干列字段组成，一个字段对应一个事件属性。

一条完整的事件记录，通常会包括 xwho、xwhen、xwhat、$os、$ip 等等少则百列、多则数百列属性字段，涵盖了 SDK 默认采集的预置属性以及用户自定义的事件属性。

下图中，我们模拟了一份事件表数据片段（非真实且仅有少量字段）。

<div align="left"><img src="/files/-MKV6qAEMaTleebPQndW" alt=""></div>

有了这些字段，我们就可以统计这部分用户的地理位置分布以及行为的触发时间分布等。

然而，除了通过国家、省份、城市这样常规的地理维度进行分析外，我们还想对华南、华北、华中等区域的数据进行汇总，然而此前埋点时并没有上报这个属性。

那么此时，我们就可以通过维度表来为每条事件补充一个新的属性（area）。

下图是我们构造的一份简单的维度表数据示例。

维度表中的数据仍然是通过行和列组织起来的，一行数据为一条记录，每条记录必须具备唯一性，不得重复。

<div align="left"><img src="/files/-MKV73615-NQnmitemyz" alt=""></div>

我们会发现，示例中的事件表和维度表里，都存在 $province 这个字段 。

通过这个字段，我们可以将事件表和维度表关联起来，将表中相应的行进行匹配，从而为事件表中的所有行“新增”一个“area”字段。

举例来说，当事件表中一个事件的 $province字段值=“北京”时，就可以通过两张表的关联得到该事件的 area = “华北”，以此类推，最终我们为每条事件都扩展了一个新的属性：“area”，如下图所示。

<div align="left"><img src="/files/-MKV7BjbQyEo9G7aL6sk" alt=""></div>

在这个场景示例中，$province 字段就像“纽扣”一样，可以将两张表中的行“扣”起来，将行内的数据正确地关联和匹配在一起，从而达到扩展事件属性的效果。

**像 $province 这样的字段被我们称为“关联字段”。**

**使用维度表的前提，就是要在事件表中选择一个或多个合适的字段作为关联字段。当然，这个字段在维度表中也必须存在。**

通常来说，使用单一字段作为关联字段足够满足多数使用场景。

如上面这个示例中，仅通过省份（$province ）我们就可以进行地理区域的区分，所以在创建维度表时指定 $province 这一个字段作为关联字段即可。

**但也有部分情况，需要使用多字段关联。方舟维度表最多支持选择3个字段作为关联字段。**

> **什么是多字段关联**

上文中我们提到，维度表中的每行数据必须具备唯一性。因为只有保证了唯一性，才能确保事件表和维度表之间能够进行正确地关联。

对于维度表本身而言，关联字段还有一个作用，就是用来标识每条记录的唯一性。也就是说，维度表中关联字段的值（也称key值），就是每条记录的唯一ID。示例中 area 维度表中每行数据的 $province 的值（北京、上海等）都是唯一的、不重复的。

所谓多字段关联，就是通过多个字段唯一标识一条记录，类似 MySQL 中的联合主键。

所以，在多字段关联的场景中，当多个字段的值同时相等时，才能将维度表中新增的“属性”列匹配给事件表中对应的行。

举例来说，仍沿用上文场景。假如我们只需要为某一个或者某几个事件（xwhat）新增属性，那么我们就可以指定 xwhat 和 $province 两个字段为关联字段（多字段关联）。

这种情况下，只有当事件表中和维度表中多个关联字段（ xwhat 和 $province ）的值同时相等时，才能将维度表中新增的属性 (area) 匹配给事件表中对应的行。

事件表中，除了xwhen 和 xwho ，其余所有列字段都可以作为关联字段，包括xwhat、预定义属性字段、自定义属性字段。您可以在 **元数据管理》事件属性** 中查看事件表的“字段”信息。

需要注意的是，使用多字段关联会增加关联计算的复杂度，从而导致查询较慢，因此建议尽量使用单一字段进行关联，除非只能通过多字段关联才满足需求。·&#x20;

## **适用场景**

并非所有事件属性都适宜通过维度表来上报。

如前所述，除 xwhen 和 xwho 外，我们可以基于事件表中的任意列来为事件扩充属性。

**但我们还需要了解的是，这里所言的“扩充”实质上主要作用于查询环节，而并非在事件表中真的添加了一列数据。**

也就是说，只有在我们使用维度表中的字段进行分析查询的时候（点击查询按钮之后），方舟系统才会“临时”去对事件表和维度表进行关联匹配以用于计算。

因此，维度表仅适于在部分场景下进行使用：

1\. 首先，使用维度表必须以埋点采集数据为基础，以合理的关联字段为前提。

2\. 维度表仅适用于上报、存储一些相对静态的、或者低频变更的属性信息。例如前面举例的地理区域维度、商品类目信息。

而对于记录用户行为发生的当下，用户行为（即事件）及用户行为对象（如购买的商品）的状态信息（动态价格、活动信息），仍需要通过埋点上报。

3\. 维度表数据不宜过多，文件不宜过大。目前一张维度表的文件大小上限为10M，且一个项目支持5个维度表。

&#x20;综上，更适于“查漏补缺“的场景。

## **功能操作说明**

将需要添加的属性数据按照一定的格式写入 CSV 文件，然后进入 **元数据管理 》维度表** 页面，通过界面上传文件，就可以将数据导入方舟后台用于分析了。

### **创建维度表**

**第一步：准备数据**

{% hint style="warning" %}
请注意：

维度表数据文件，必须遵循一定的格式规范；详细规范请参考[《维度表数据文件规范》](<https://www.analysysdata.com//file/202011/33050611342020.pdf	>)。

创建和编辑文件时，建议尽量使用纯文本编辑器；避免使用Microsoft Excel 和 WPS 表格这类电子表格软件，容易导致数据文件错误。
{% endhint %}

**第二步：创建维度表并导入数据**

* 功能入口：元数据管理 》维度表（注：须开通维度表功能权限）
* 点击创建维度表，填写基本信息&#x20;

![](/files/-MKVAX__LZVyjHjBtdRc)

* 选择准备好的数据文件，确认导入数据

![](/files/-MKVAgd8p2sz7bKOzE1h)

**数据导入完成后，就可以使用维度表进行分析了。**

在大部分分析模型以及用户分群中，都可以选择维度表中的字段，进行条件筛选和细分操作，

### **更多操作**

![](/files/-MKVBiZPnOJDVmsGnplm)

* **更新维度表**

支持追加行、追加列、修改行、修改列，以及全表覆盖更新

更新文件格式仍须遵循 数据文件规范

* **清空数据**

·仅清空表中的数据，表结构仍然保留

* **删除**

·一个项目仅支持创建5张维度表，对于不再需要的维度表，可以酌情进行删除

&#x20;但注意删除之后，所有通过该维度表创建的分析图表将失效。

* **导出数据**

·导出维度表数据，查看数据内容，进行编辑更新


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://arkdocs.analysys.cn/features/project-manegement/meta-data/dimension-table.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
