PortfolioReport

English only

Use Cases

The portfolioReport query provides an advanced way to retrieve and filter portfolio data across users and trainings. It supports filtering by type, score, progress, completion status, date ranges, and more.

Filter by type (e.g., certificates only)

query {
  portfolioReport(
    first: 50
    relatedObjectTypes: [CERTIFICATE]
  ) {
    edges {
      node {
        id
        title
        relatedType
        user { id name }
        completionDate
      }
    }
    count
  }
}

Filter by user and score

query {
  portfolioReport(
    userIds: ["uuid-user"]
    scoreThresholdReached: true
  ) {
    edges {
      node {
        title
        score
        scoreThreshold
        progress
        completionDate
      }
    }
  }
}

All completed trainings for a group

query {
  portfolioReport(
    userGroupIds: ["uuid-group"]
    completed: true
    relatedObjectTypes: [TRAINING]
  ) {
    edges {
      node {
        title
        user { id name }
        completionDate
        score
        progress
        timeSpent { days seconds }
      }
    }
    count
  }
}

Filter by date range

query {
  portfolioReport(
    completionDateFrom: "2024-01-01"
    completionDateTo: "2024-12-31"
    relatedObjectTypes: [TRAINING, COURSE]
    first: 50
    sortBy: { field: COMPLETION_DATE, direction: DESC }
  ) {
    edges {
      node {
        title
        user { name email }
        completionDate
        progress
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

GraphQL Definitions

Query

portfolioReport(
  offset: Int
  after: String
  first: Int
  q: String
  startDateFrom: Date
  startDateTo: Date
  endDateFrom: Date
  endDateTo: Date
  completionDateFrom: Date
  completionDateTo: Date
  progressFrom: Float
  progressTo: Float
  scoreFrom: Float
  scoreTo: Float
  timeSpentFrom: Int
  timeSpentTo: Int
  completed: Boolean
  scoreThresholdReached: Boolean
  userGroupIds: [UUID!]
  relatedObjectTypes: [ContentTypeValue]
  sortBy: PortfolioReportSortByInput
  relatedObjectUids: PortfolioReportRelatedObjectsInput
  relatedObjectTrainingIds: [UUID!]
  relatedObjectOfferEventIds: [UUID!]
  offerEventType: [OfferEventType!]
  userIds: [UUID!]
  withAggregatedFilterValues: Boolean = false
  isTrainingReport: Boolean = false
  isOffersReport: Boolean = false
  isCertificateOrModuleReport: Boolean = false
  isModuleReport: Boolean = false
): PortfolioItemReportSearchConnection

Response type

type PortfolioItemReport {
  id: ID!
  title: String!
  startDate: DateTime
  endDate: DateTime
  completionDate: DateTime
  user: User!
  score: Float
  progress: Float
  scoreThreshold: Float
  scoreMax: Float
  scoreType: String
  relatedObjectId: UUID
  relatedType: ContentTypeValue
  timeSpent: TimeDelta
  relatedObjectHasComments: Boolean
  relatedObjectHasFiles: Boolean
}

Available ContentTypeValue options

TRAINING, COURSE, CERTIFICATE, EXTERNAL_CONTENT, SCORM, VIDEO, LTI


Notes

  • Use relatedObjectTypes to filter by content type (training, course, certificate, etc.).
  • completed: true returns only items where the user has finished.
  • scoreThresholdReached: true returns only items where the user met the passing score.
  • Use sortBy for ordering results (e.g., by completion date, score, or user name).
  • This is the primary query for building reports and dashboards.
  • Pagination follows the Relay pattern with first, after, and pageInfo.
Sluit melding