群组
按人们做什么或是什么来定义的人群:每个群组是一个名字和一个定义,定义由可读的条款组成:某事件在某天数内做了多少次,或某属性等于某值。空定义不选任何人,这是有意为之。


The library
Each card is one cohort: its name, whether it is active, how many people it currently selects and how fresh that answer is. A cohort whose clauses count behaviour over history is swept on a schedule and says when it was last evaluated, or that it never has been; one defined purely by current attributes is live and carries no timestamp, because a timestamp would imply a staleness it does not have. The toolbar narrows by search, kind and state, and deleting asks first, warning that analyses filtered by the cohort stop being filtered by it.
还有第三种:静态群组,它是一份固定的人员名单,而不是一个定义。它可以在分析工作台上通过 Save 从结果中保留下来,也可以在 New cohort 对话框里由粘贴的名单生成,并且永不重新评估,所以在扫描式群组显示时间戳的位置,它的卡片写着从不,这是有意为之。展开它显示的是名单本身而不是定义:它包含多少人、名单从何而来、Add people,以及每一行旁边的移除。
The definition editor


Opening a card unfolds its definition in place: behavioural clauses (did an event at least so many times within so many days, with the project's own event names suggested) and state clauses (an attribute compared to a value). A cohort is named first and defined after, and an empty definition selects nobody rather than everybody, which the open row says in as many words. Opening a second card does not close the first, so two definitions can be compared side by side without losing edits.
New cohort 先问名字,再问 Membership,因为两种群组的做法不同,而给群组起名的这个对话框正是决定其种类的地方。Defined by rules 给出上面说的定义。A fixed list of people 则展开一个填写 distinct id 的字段,每行一个,一次最多 10,000 个,之后还可以再添加;这样做出来的群组一出生就带着它的人,并且立刻是启用的。
Where cohorts are used
A cohort scopes a question in the Analytics workbench, targets a campaign in the Inbox, and gates workflow triggers on the Workflows screen. The same set of people, wherever the set is needed.
行上的复制到…会打开配置复制,并已勾选此对象;参见项目,复制配置。
Where this meets the API
The concept behind the screen is the People and cohorts pillar; the people being selected are the People directory. On the wire: the library is the cohorts query, cohort reads one and cohortMemberCount counts its people; editing is createCohort, updateCohort, setCohortActive and deleteCohort; a static cohort is born by createStaticCohort from a pasted list or by createCohortFromResult from a result, its list moves by addCohortMembers and removeCohortMembers, and cohortMembers reads it back a page at a time (GraphQL reference).
The definition as JSON
A rules cohort's definition is one JSON object, the definition argument of createCohort and updateCohort and the definition field of the MCP tools prodantix.cohorts.create and prodantix.cohorts.update. It holds clauses, a list of at most 32, and a person is a member when every clause matches. An empty list selects nobody. A field the shape does not name is refused, so read an existing cohort with cohort or prodantix.cohorts.get before changing one.
{
"clauses": [
{ "kind": "state", "condition": { "attribute": "plan", "op": "eq", "value": "pro" } },
{ "kind": "state", "condition": { "attribute": "country", "op": "in", "value": ["DE", "AT", "CH"] } },
{ "kind": "behavioural", "event": "purchase", "atLeast": 3, "withinDays": 30 }
]
}State clauses
{ "kind": "state", "condition": { ... } }. The condition names an attribute, one of the person's properties or distinct_id, an op and, for most operators, a value. The operators are eq, neq, in, not_in, contains, gt, gte, lt, lte, is_set, is_not_set. eq, neq and contains compare as text; gt, gte, lt and lte compare as numbers; in and not_in take a list of values; is_set and is_not_set take none, and a property that is empty text counts as not set. A cohort made only of state clauses is live: a person joins or leaves the moment an event changes the property. The two cohort operators of flag targeting, in_cohort and not_in_cohort, are refused here: a cohort cannot be defined by another cohort.
Behavioural clauses
{ "kind": "behavioural", "event": "purchase", "atLeast": 3, "withinDays": 30 }: the person did the event at least atLeast times in the last withinDays days. Both are whole numbers, and a person counts only once they did the event at all, so an atLeast of 0 reads as 1. One behavioural clause makes the cohort swept: its members are worked out on a schedule rather than as events land, and the cohort says when it last was.
Static cohorts
A static cohort's definition is { "kind": "static", "clauses": [] }: its members are a list somebody wrote, not rules. Given to createCohort it makes an empty list; createStaticCohort or prodantix.cohorts.create_static makes one holding its people, and createCohortFromResult makes one from a result. An update cannot turn a rules cohort into a static one or back; make a new cohort of the kind you want.