> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livingsecurity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 按人员划分的合规情况

> 基于 /v1 的分配、注册和课程数据，重新创建原供应商按人员划分的培训合规导出报告。

本报告是原供应商按人员划分的合规导出报告中的培训部分：包含目录身份信息，以及每位人员每次培训注册对应的一行数据（模块状态和日期）。

数据粒度为长格式，即人员 × 分配，因为这正是 `GET /v1/assignments/{id}/enrollments` 已返回的数据结构。该查询不会将模块透视为列。

<Note>
  策略确认不属于本报告的范围。Living Security 没有策略接受 API，因此这些旧版列不在范围之内，也不是待处理的映射。请参阅[与旧版导出报告的差异](#%E4%B8%8E%E6%97%A7%E7%89%88%E5%AF%BC%E5%87%BA%E6%8A%A5%E5%91%8A%E7%9A%84%E5%B7%AE%E5%BC%82)。
</Note>

设置、凭据、分页和速率限制重试与 [Power BI / Excel 连接指南](/zh-Hans/developers/v1/powerbi)相同。请先添加共享的 `Fn_FetchAll` 查询；本报告会按名称调用该查询。

## 所需的密钥权限范围

| 权限范围 | 用途 |
| - | - |
| `training:read` | `GET /v1/assignments` 和 `GET /v1/assignments/{id}/enrollments` |
| `course:read` | `GET /v1/courses`（目录标题） |

## 源端点

| 端点 | 作用 |
| - | - |
| `GET /v1/assignments` | 分配列表：`assignment_id`、标题、`course_id`、生命周期状态、`created_at`。该查询不按状态筛选，因此活动、已暂停和已完成的分配都会显示（历史合规数据）。 |
| `GET /v1/assignments/{id}/enrollments` | 每位学员的进度。对每个分配执行一次分页遍历。这是事实数据的粒度，也是本报告中唯一将电子邮件地址作为报表关联键的 `/v1` 资源。 |
| `GET /v1/courses` | 将 `course_id` 解析为课程标题（培训模块名称）。`Assignment.title` 是活动标签，不是模块名称。 |

此查询**不会**调用 `GET /v1/entities`。注册行已包含 `email` 和 `display_name`，而实体列表中没有部门或职位，因此遍历该列表并不能填充注册行中尚未包含的目录列。

### 粒度

每次注册（人员 × 分配）对应一行。如果同一人员通过两个分配被分配了同一门课程，则会生成两行。没有注册记录的人员不会出现，因为 `/v1` 在没有电子邮件地址的情况下无法生成可用的目录行，而虚构仅包含人员的行会混淆数据粒度。

请求预算：对每个分配依次执行一次分页遍历，并受共享的每密钥速率限制约束。请务必设置 `limit = "500"`。

## 列映射

旧版列名来自您的原供应商导出报告。`/v1` 字段为公共 API 名称；查询会为报告对其中部分字段使用别名。

| 旧版列 | `/v1` 字段或推导方式 | 报告列 |
| - | - | - |
| 电子邮件 | `Enrollment.email` | `email` |
| 全名 | `Enrollment.display_name` | `full_name` |
| 部门 | 不在 `/v1` 上 | 省略，不填充空值 |
| 其他目录信息（职位、经理、地点等） | 不在 `/v1` 上，实体仅包含电子邮件地址和显示名称。 | 省略 |
| 培训模块/课程名称 | `Course.title`，回退到 `Assignment.title` | `course_name` |
| 分配/模块状态 | `Enrollment.status` — `not_started` \| `in_progress` \| `completed` \| `overdue` \| `withdrawn` | `enrollment_status` |
| 分配日期 | `Enrollment.assigned_at` | `assigned_at` |
| 完成日期 | `Enrollment.completed_at` | `completed_at` |
| 截止日期 | `Enrollment.due_at`（旧版导出报告可能没有此项；由于 API 提供该字段，因此予以包含） | `due_at` |
| 策略接受/确认 | 无策略域 | 省略 |
| 策略名称、接受日期 | 无策略域 | 省略 |

为星型架构模型保留的关联键：`entity_id`、`assignment_id`、`course_id`、`user_assignment_id`。

该查询还会保留 `course_slug`、`assignment_title`、`passed`、`attempts`、`assignment_lifecycle_status` 和 `assignment_created_at`。`enrollment_status` 表示学员的进度，而非分配的生命周期（`active` / `paused` / `completed`）。

## 与旧版导出报告的差异

* **无法获取策略接受情况。** 本平台没有策略域，即没有 `/policies`、`/policy_acceptances` 或等效的 `/v1` 资源。请勿将这些列视为待处理的映射。它们不在范围之内。
* **目录扩展信息被省略，而非填充空值。** 部门、职位、经理和地点不在 `/v1` 上。该查询不会为它们虚构空列。
* **包含截止日期**，即使旧版导出报告没有该项，因为 API 中提供 `Enrollment.due_at`。
* **课程名称优先使用目录标题。** `Course.title` 即为模块名称。仅当目录行缺失（已删除或未发布）时，才使用 `Assignment.title`。
* **采用长格式，不做透视。** 每次注册对应一行，而不是每位人员一行、每个模块一列。

## 后续步骤

<CardGroup cols={2}>
  <Card title="Power BI 和 Excel 设置" href="/zh-Hans/developers/v1/powerbi">
    凭据、分页，以及在 Power BI 或 Excel 中加载这些查询。
  </Card>

  <Card title="电子邮件网络钓鱼日志" href="/zh-Hans/developers/v1/reports/email-phishing-log">
    过去 12 个月的事件级网络钓鱼交互数据。
  </Card>

  <Card title="最易受攻击的用户" href="/zh-Hans/developers/v1/reports/most-susceptible-users">
    按人员汇总的 12 个月点击、凭据和报告情况。
  </Card>

  <Card title="API 密钥" href="/zh-Hans/developers/developer-hub/api-keys">
    为刷新本报告的密钥授予 `training:read` 和 `course:read`。
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.