适用于:✅Azure 数据资源管理器
为 New Users 的队列计算有用的活动指标(非重复计数值、非重复的新值计数、保留率和变动率)。 将 New Users 的每个队列(时间窗口内首先看到的所有用户)与以前的所有队列进行比较。
比较会考虑所有以前的时间窗口。 例如,在从 T2 到 T3 的记录中,非重复用户计数是出现在 T3 中同时未出现在 T1 和 T2 中的所有用户。
该插件通过 evaluate 运算符调用。
语法
TabularExpression | evaluate new_activity_metrics(IdColumn, TimelineColumn, Start, End, Window [, Cohort] [, dim1, dim2, ...] [, Lookback] )
详细了解语法约定。
参数
| 客户 | 类型 | 必需 | 说明 |
|---|---|---|---|
| TabularExpression | string |
✔️ | 要为其计算活动指标的表格表达式。 |
| IdColumn | string |
✔️ | 列的名称,其 ID 值表示用户活动。 |
| TimelineColumn | string |
✔️ | 表示时间线的列的名称。 |
| Start | 标量 (scalar) | ✔️ | 分析开始时段的值。 |
| End | 标量 (scalar) | ✔️ | 分析结束时段的值。 |
| 窗口 | 标量 (scalar) | ✔️ | 分析窗口时段的值。 可以是数字、日期/时间或时间范围值,也可以是 week、month 或 year 中的一个字符串(在这种情况下,这些时段分别为 startofweek/startofmonth/startofyear)。 使用 startofweek 时,请确保开始时间为星期日,否则第一个队列将为空(因为 startofweek 被视为星期日)。 |
| 队列 | 标量 (scalar) | 指示特定的队列。 如未提供,则计算并返回与分析时间窗口相对应的所有队列。 | |
| dim1, dim2, ... | dynamic |
维度列的数组,用于切分活动指标计算。 | |
| Lookback | string |
一个表格表达式,其中包含一组属于“回溯”时段的 ID。 |
返回
返回一个表,其中包含“from”和“to”时间线周期的每个组合以及每个现有列(维度)组合的以下内容:
- 非重复计数值
- 新值的非重复计数
- 保留率
- 变动率
输出表架构如下:
| from_TimelineColumn | to_TimelineColumn | dcount_new_values | dcount_retained_values | dcount_churn_values | retention_rate | churn_rate | dim1 | .. | dim_n |
|---|---|---|---|---|---|---|---|---|---|
| 类型:自 TimelineColumn 起 | 相同 | long | long | Double | Double | Double | .. | .. | .. |
from_TimelineColumn- 新用户的队列。 此记录中的指标是指此时间段内首次见到的所有用户。 决定是否为首次见到要考虑分析时段中所有之前的时段。to_TimelineColumn- 进行比较的时段。dcount_new_values- 出现在to_TimelineColumn中同时未出现在from_TimelineColumn(含)之前的所有时段中的非重复用户数。dcount_retained_values- 在所有的新用户(即from_TimelineColumn中首次出现的用户)中,出现在to_TimelineCoumn中的非重复用户数。dcount_churn_values- 在所有的新用户(即from_TimelineColumn中首次出现的用户)中,未出现在to_TimelineCoumn中的非重复用户数。retention_rate- 队列(首次出现在from_TimelineColumn中的用户)中的dcount_retained_values百分比。churn_rate- 队列(首次出现在from_TimelineColumn中的用户)中的dcount_churn_values百分比。
注意
有关 Retention Rate 和 Churn Rate 的定义,请参阅 activity_metrics 插件文档中的“注意”部分。
示例
以下示例数据集显示了哪些用户将出现在哪些天。 该表基于源 Users 表而生成,如下所示:
Users | summarize tostring(make_set(user)) by bin(Timestamp, 1d) | order by Timestamp asc;
输出
| Timestamp | set_user |
|---|---|
| 2019-11-01 00:00:00.0000000 | [0,2,3,4] |
| 2019-11-02 00:00:00.0000000 | [0,1,3,4,5] |
| 2019-11-03 00:00:00.0000000 | [0,2,4,5] |
| 2019-11-04 00:00:00.0000000 | [0,1,2,3] |
| 2019-11-05 00:00:00.0000000 | [0,1,2,3,4] |
原始表插件的输出如下所示:
let StartDate = datetime(2019-11-01 00:00:00);
let EndDate = datetime(2019-11-07 00:00:00);
Users
| evaluate new_activity_metrics(user, Timestamp, StartDate, EndDate-1tick, 1d)
| where from_Timestamp < datetime(2019-11-03 00:00:00.0000000)
输出
| R | from_Timestamp | to_Timestamp | dcount_new_values | dcount_retained_values | dcount_churn_values | retention_rate | churn_rate |
|---|---|---|---|---|---|---|---|
| 1 | 2019-11-01 00:00:00.0000000 | 2019-11-01 00:00:00.0000000 | 4 | 4 | 0 | 1 | 0 |
| 2 | 2019-11-01 00:00:00.0000000 | 2019-11-02 00:00:00.0000000 | 2 | 3 | 1 | 0.75 | 0.25 |
| 3 | 2019-11-01 00:00:00.0000000 | 2019-11-03 00:00:00.0000000 | 1 | 3 | 1 | 0.75 | 0.25 |
| 4 | 2019-11-01 00:00:00.0000000 | 2019-11-04 00:00:00.0000000 | 1 | 3 | 1 | 0.75 | 0.25 |
| 5 | 2019-11-01 00:00:00.0000000 | 2019-11-05 00:00:00.0000000 | 1 | 4 | 0 | 1 | 0 |
| 6 | 2019-11-01 00:00:00.0000000 | 2019-11-06 00:00:00.0000000 | 0 | 0 | 4 | 0 | 1 |
| 7 | 2019-11-02 00:00:00.0000000 | 2019-11-02 00:00:00.0000000 | 2 | 2 | 0 | 1 | 0 |
| 8 | 2019-11-02 00:00:00.0000000 | 2019-11-03 00:00:00.0000000 | 0 | 1 | 1 | 0.5 | 0.5 |
| 9 | 2019-11-02 00:00:00.0000000 | 2019-11-04 00:00:00.0000000 | 0 | 1 | 1 | 0.5 | 0.5 |
| 10 | 2019-11-02 00:00:00.0000000 | 2019-11-05 00:00:00.0000000 | 0 | 1 | 1 | 0.5 | 0.5 |
| 11 | 2019-11-02 00:00:00.0000000 | 2019-11-06 00:00:00.0000000 | 0 | 0 | 2 | 0 | 1 |
下面分析了输出中的数条记录:
记录
R=3,from_TimelineColumn=2019-11-01,to_TimelineColumn=2019-11-03:- 此记录的用户即为 11/1 出现的所有新用户。 由于这是第一个时段,因此这些是该箱中的所有用户 - [0,2,3,4]
dcount_new_values- 出现在 11/3 同时未出现 11/1 的用户的数目。 这里有一个用户 -5。dcount_retained_values- 11/1 出现的所有新用户中,有多少保留到了 11/3? 有三个值 ([0,2,4]),而count_churn_values为 1(用户3)。retention_rate= 0.75 - 四个新用户(出现在 11/1 的用户)中保留了三个。
记录
R=9,from_TimelineColumn=2019-11-02,to_TimelineColumn=2019-11-04:- 此记录关注首次出现在 11/2 的新用户 - 用户
1和5。 dcount_new_values- 出现在 11/4 同时未出现在T0 .. from_Timestamp间所有时段的用户的数目。 这意味着,出现在 11/4 但未出现在 11/1 或 11/2 的用户,没有这样的用户。dcount_retained_values- 11/2 出现的所有新用户 ([1,5]) 中,有多少保留到了 11/4? 有一个这样的用户 ([1]),while count_churn_values为 1(用户5)。retention_rate为 0.5 - 11/2 出现的两个新用户中 11/4 保留了一个。
- 此记录关注首次出现在 11/2 的新用户 - 用户
每周保留率和变动率(一周)
下个查询计算 New Users 队列(首周出现的用户)的每周保留率和变动率。
// Generate random data of user activities
let _start = datetime(2017-05-01);
let _end = datetime(2017-05-31);
range Day from _start to _end step 1d
| extend d = tolong((Day - _start) / 1d)
| extend r = rand() + 1
| extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1)
| mv-expand id=_users to typeof(long) limit 1000000
// Take only the first week cohort (last parameter)
| evaluate new_activity_metrics(['id'], Day, _start, _end, 7d, _start)
| project from_Day, to_Day, retention_rate, churn_rate
输出
| from_Day | to_Day | retention_rate | churn_rate |
|---|---|---|---|
| 2017-05-01 00:00:00.0000000 | 2017-05-01 00:00:00.0000000 | 1 | 0 |
| 2017-05-01 00:00:00.0000000 | 2017-05-08 00:00:00.0000000 | 0.544632768361582 | 0.455367231638418 |
| 2017-05-01 00:00:00.0000000 | 2017-05-15 00:00:00.0000000 | 0.031638418079096 | 0.968361581920904 |
| 2017-05-01 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 0 | 1 |
| 2017-05-01 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0 | 1 |
每周保留率和变动率(完整矩阵)
下个查询计算 New Users 队列的每周保留率和变动率。 如果前面的示例计算一周的统计信息,以下查询将生成每个 from/to 组合的 NxN 表。
// Generate random data of user activities
let _start = datetime(2017-05-01);
let _end = datetime(2017-05-31);
range Day from _start to _end step 1d
| extend d = tolong((Day - _start) / 1d)
| extend r = rand() + 1
| extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1)
| mv-expand id=_users to typeof(long) limit 1000000
// Last parameter is omitted -
| evaluate new_activity_metrics(['id'], Day, _start, _end, 7d)
| project from_Day, to_Day, retention_rate, churn_rate
输出
| from_Day | to_Day | retention_rate | churn_rate |
|---|---|---|---|
| 2017-05-01 00:00:00.0000000 | 2017-05-01 00:00:00.0000000 | 1 | 0 |
| 2017-05-01 00:00:00.0000000 | 2017-05-08 00:00:00.0000000 | 0.190397350993377 | 0.809602649006622 |
| 2017-05-01 00:00:00.0000000 | 2017-05-15 00:00:00.0000000 | 0 | 1 |
| 2017-05-01 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 0 | 1 |
| 2017-05-01 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0 | 1 |
| 2017-05-08 00:00:00.0000000 | 2017-05-08 00:00:00.0000000 | 1 | 0 |
| 2017-05-08 00:00:00.0000000 | 2017-05-15 00:00:00.0000000 | 0.405263157894737 | 0.594736842105263 |
| 2017-05-08 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 0.227631578947368 | 0.772368421052632 |
| 2017-05-08 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0 | 1 |
| 2017-05-15 00:00:00.0000000 | 2017-05-15 00:00:00.0000000 | 1 | 0 |
| 2017-05-15 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 0.785488958990536 | 0.214511041009464 |
| 2017-05-15 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0.237644584647739 | 0.762355415352261 |
| 2017-05-22 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 1 | 0 |
| 2017-05-22 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0.621835443037975 | 0.378164556962025 |
| 2017-05-29 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 1 | 0 |
回溯时段的每周保留率
下面的查询在考虑 lookback 时段的情况下计算 New Users 队列的保留率:一个表格查询,其中包含用于定义 New Users 队列的一组 ID(此集中未出现的所有 ID 为 New Users)。 查询在分析期间检查 New Users 的保留行为。
// Generate random data of user activities
let _lookback = datetime(2017-02-01);
let _start = datetime(2017-05-01);
let _end = datetime(2017-05-31);
let _data = range Day from _lookback to _end step 1d
| extend d = tolong((Day - _lookback) / 1d)
| extend r = rand() + 1
| extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1)
| mv-expand id=_users to typeof(long) limit 1000000;
//
let lookback_data = _data | where Day < _start | project Day, id;
_data
| evaluate new_activity_metrics(id, Day, _start, _end, 7d, _start, lookback_data)
| project from_Day, to_Day, retention_rate
输出
| from_Day | to_Day | retention_rate |
|---|---|---|
| 2017-05-01 00:00:00.0000000 | 2017-05-01 00:00:00.0000000 | 1 |
| 2017-05-01 00:00:00.0000000 | 2017-05-08 00:00:00.0000000 | 0.404081632653061 |
| 2017-05-01 00:00:00.0000000 | 2017-05-15 00:00:00.0000000 | 0.257142857142857 |
| 2017-05-01 00:00:00.0000000 | 2017-05-22 00:00:00.0000000 | 0.296326530612245 |
| 2017-05-01 00:00:00.0000000 | 2017-05-29 00:00:00.0000000 | 0.0587755102040816 |