# 事件属性与用户属性

> 来源：https://help.gravity-engine.com/docs/getting-started/event-and-user-properties
> 说明事件属性与用户属性的用途和区别，帮助接入人员为行为分析和用户分析选择正确的数据类型。



在完成前期数据模型准备之后，需要追踪的事件已基本确定，接下来要做的是为这些事件以及用户设置属性。值得注意的是，`事件属性`与`用户属性`的设置会直接影响到分析的深度，因此如何设定需要仔细斟酌，本节将会简单介绍设置用户属性与事件属性的要点。

## 1. 事件属性还是用户属性？ [#1-事件属性还是用户属性]

一般情况下，`Event` 都是在用户产生某个有意义的行为时上报的，因此事件属性除了与该事件相关的属性外，还能够反映用户在进行该行为时的状态；而用户属性则只表示用户最新的状态。比如同样表示会员等级的字段，事件属性中的等级表示用户发生该行为时的会员等级，而用户属性的等级则是用户现在的会员等级。

另外，引力引擎 的客户端 SDK 将会自动收集一些事件属性以及用户属性，如果您想了解这些属性，您可以在[事件属性页面](https://web.gravity-engine.com/#/manage/metadata/eventProperty)中过滤查看`预置属性`。

## 2. 哪些属性应该作为公共事件属性？ [#2-哪些属性应该作为公共事件属性]

公共事件属性是会作用于每一个事件的属性，建议您将重要的属性或常用属性在上传事件前设置为公共事件属性，我们建议将会员等级、渠道设置为公共事件属性。

## 3. 哪些属性应该作为事件属性？ [#3-哪些属性应该作为事件属性]

事件属性是每种事件所独有的属性，在您上传某个事件之前需要手动配置。对于如何设置事件属性，需要使用您在[模型介绍](/docs/getting-started/data-model)整理好的事件列表，根据您的分析需求以及埋点触发的条件进行设置。

事件属性的英文名称，我们建议只使用英文大写、英文小写以及下划线进行标识，并且名称最好是有意义的，请勿使用中文命名。如果有在不同事件中存在意义相同的属性，比如递交订单中的购买商品 ID 以及加入购物车时的商品 ID，最好设置为同一属性名，其作用相当于合并属性。

目前支持的属性值类型有文本、整数、浮点数、布尔值、日期、时间以及列表，自定义属性名必须以英文字母开头，只能包含英文字母、数字和下划线，长度不超过 50 个字符；布尔值属于属性值类型，不能作为属性名规则，如果需要了解属性具体的含义，您可以去[元数据页面](https://web.gravity-engine.com/#/manage/metadata/metaEvent)中查看备注信息。

当您设置好一条属性之后，请将属性的名称、类型以及备注补充到[数据模型](/docs/getting-started/data-model)整理的事件文档中，此时的事件文档中会有每个事件的名称、描述、重要程度、分析点以及属性名、属性类型和属性意义。

## 4. 哪些属性应该作为用户属性？ [#4-哪些属性应该作为用户属性]

用户属性表示的是用户的不变的属性以及最新状态，我们建议将下列三种属性设置为用户属性：

（1）固定属性：固定属性指的是用户不会变更的属性，这些属性往往是注册时的信息或首次产生某行为时的信息，比如首次注册时间、首次来源渠道、首次付费时间等。对于这样的属性，在埋点时请调用对应 SDK 的“仅首次设置”方法（如小游戏/小程序的 `userSetOnce`），并建议在属性名前加上 `first`。

（2）最新状态：最新状态指的是用户的当前状态，往往是用户最后产生某行为的信息，比如最后上线时间、最后付费时间等等。对于这样的属性，在埋点时请调用对应 SDK 的“覆盖设置”方法（如小游戏/小程序的 `userSet`），并建议属性名前加上 `latest`。

（3）累计值：累计值实质上是最新状态的一种特殊形式，累计值的数据类型为数值型，主要是产生某重要行为的次数或者数值型的最新状态，比如累计付费次数、累计付费金额、累计登录次数等等，在埋点时请调用对应 SDK 的“数值累加”方法（如小游戏/小程序的 `userAdd`），每次调用都会在原先的数值上进行累加操作。

在设置完用户属性后，请将这些属性加入到[数据模型](/docs/getting-started/data-model)整理的事件文档中。

上述方法名会因平台而异，请从 [SDK 总览](/docs/client-sdk/sdk-overview) 进入所选平台的“用户属性上报”文档；属性名称和取值限制请统一参考 [数据规则](/docs/getting-started/data-rules)。
