# OpenIAM report services

The Report Services in OpenIAM provide a **centralized framework** for generating, managing, and delivering reports across the platform. They enable administrators and auditors to access critical identity, access, and compliance data through configurable reports that support monitoring, analysis, and regulatory requirements.

The reports follow a common service pattern. Each report gathers data, formats the output, and delivers it by download or email.

### Report architecture

The report service uses a shared processing model across report types.

<img src="/files/9fa68229441bb67a20c9a1ac31984116a52e0cc3" alt="Architectural pattern of a report" width="375">

Most reports collect data in batches, enrich the results, and then build the output file.

The generated reports can be delivered either through **direct download**, which streams the file directly to the browser, or **via email**, where the report is saved to disk and sent using the mail service. In many cases, both delivery methods can be configured individually for each report.

From a performance perspective, several aspects must be taken into account. **Query optimization** plays a key role: reports typically use **pagination of 100–500 records** per batch, with ElasticSearch enabled where available, and employ caching of service calls through **in-memory maps** such as HashMap. Additionally, date range filtering is applied on the backend to limit query scope and improve efficiency.

Memory management is another critical consideration. Currently, reports are often held **entirely in memory** using large, `ByteArrayOutputStream` objects, which can cause performance issues with large datasets. To address this and to handle large outputs more efficiently, **streaming** should be implemented.

To further enhance performance, **service call reduction techniques** are used. This includes caching frequently accessed entities such as roles, groups, users, managed systems, and resource types. By avoiding redundant lookups, these strategies reduce overall system load and improve report generation speed.

When reviewing your reporting setup, it is advisable to **download reports individually** and focus on aspects such as how report-specific data is gathered, which output fields are included, and what filtering options are available. Pay special attention to **patterns** like pagination limits, caching strategies, and service integration points. Finally, consider which reports are most frequently used within your organization, what customizations might be needed, and how the system performs when working with large datasets.

### Start here

Begin with the shared behavior and setup steps:

* [Configure report generation](/openiam-report-services/configure-report-generation.md)
* [Reports available in OpenIAM](/openiam-report-services/reports-available-in-openiam.md)

### Report reference

Use these guides to find the report that matches your scenario:

* [User and access reports](/openiam-report-services/user-and-access-reports.md)
* [Request, governance, and audit reports](/openiam-report-services/request-governance-and-audit-reports.md)
* [Entitlement and provisioning reports](/openiam-report-services/configure-report-generation.md)

### Troubleshooting

If a report runs slowly, returns no data, or fails during export, use [Troubleshoot report generation](/openiam-report-services/troubleshoot-report-generation.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-beta.openiam.com/openiam-report-services.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
