new_activity_metrics 插件
适用于:✅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 |