Примеры запросов к базе данных SQL Azure для использования службы отчетов организации Microsoft Learn

В этой статье вы узнаете, как выполнять запросы к Службе отчетов организации Microsoft Learn при синхронизации с базой данных SQL Azure. Если вы не знакомы с подробными сведениями о службе отчетов об организации или вариантах использования, рекомендуется сначала ознакомиться со статьей обзора функций .

Получение прогресса пользователя по идентификатору объекта Microsoft Entra

Столбец userId ссылается на идентификатор пользователя профиля Learn, а не идентификатор объекта Microsoft Entra. Чтобы получить информацию о ходе выполнения для конкретного пользователя с помощью идентификатора объекта Microsoft Entra, объедините таблицы пользователей и хода выполнения.

DECLARE @aadObjectId VARCHAR(50)

SELECT users.AADObjectId, progress.*
FROM users_TENANT_ID_HERE users
JOIN progress_TENANT_ID_HERE progress ON users.userId = progress.userId
WHERE users.AADObjectId = @aadObjectId

Получение прогресса с процентом завершения для конкретного элемента обучения Learn

Процент завершения можно вычислить, основываясь на durationInMinutes, который можно рассчитать при сборе данных о прогрессе для конкретных элементов обучения Microsoft Learn.

DECLARE @sourceType NVARCHAR(50)
DECLARE @sourceUid NVARCHAR(300)

-- If querying for a specific user:
-- DECLARE @aadObjectId VARCHAR(50)

SELECT
    users.AADObjectId,
    @sourceUid AS SourceUid,
    @sourceType AS SourceType,
    progress.XPReason,
    progress.XP,
    progress.AwardedOn,
    CASE
        WHEN progress.AwardedOn IS NOT NULL THEN
        (
            SELECT 1
        )

        WHEN @sourceType = 'LearningPath' THEN
        (
            -- User completed minutes of learning path
            SELECT SUM(m.durationInMinutes)
            FROM HierarchyLearningPathModule lpm
            JOIN HierarchyModule m ON m.moduleUid = lpm.ModuleUid
            JOIN progress_TENANT_ID_HERE p ON p.SourceUid = lpm.ModuleUid
            WHERE lpm.LearningPathUid = @sourceUid
            AND p.userId = users.userId
            AND p.SourceType = 'Module'
            AND p.XPReason = 'points.module.basic.completed'
        ) / CAST(
        (
            -- Total duration of learning path
            SELECT lp.durationInMinutes
            FROM HierarchyLearningPath lp
            WHERE lp.LearningPathUid = @sourceUid
        ) AS DECIMAL(5, 2))

        WHEN @sourceType = 'Module' THEN
        (
            -- User completed minutes of module
            SELECT SUM(unit.durationInMinutes)
            FROM progress_TENANT_ID_HERE p
            JOIN HierarchyUnit unit ON unit.unitUid = p.SourceUid
            AND unit.moduleUid = @sourceUid
            AND p.userId = users.userId
            AND p.SourceType = 'Unit'
            AND p.XPReason = 'points.unit.basic.completed'
        ) / CAST(
        (
            -- Total duration of module
            SELECT m.durationInMinutes
            FROM HierarchyModule m
            WHERE m.moduleUid = @sourceUid
        ) AS DECIMAL(5, 2))
    END AS PercentComplete
FROM users_TENANT_ID_HERE users
LEFT JOIN progress_TENANT_ID_HERE progress
ON users.userId = progress.userId
AND progress.SourceType = @sourceType
AND progress.SourceUid = @sourceUid
-- If querying for a specific user:
-- WHERE users.AADObjectId = @aadObjectId