Tenantry / docs / report dimensions units
Report Dimensions and Units
Report dimensions and units let you slice licensing data by organizational structure so you can see seat distribution per business unit, department, region, or any other grouping that matters to your organization.
What you can see
Dimension report summary
Each dimension shows a table of its units with:
- User count per unit.
- Assigned seat count per unit.
A stale indicator appears when the report was computed against an older directory snapshot and a newer sync has completed since. The report refreshes automatically on the next materialization cycle.
A pending state means a dimension has been created but no report has been computed yet. The first materialization runs automatically after configuration.
Unit drill-down
Click into a unit to see its license breakdown. The drill-down shows:
- A summary line with total user count and seat count for the unit.
- A license buckets table listing each product (SKU) and the number of seats assigned within that unit, sorted by seat count.
Click a specific license to see the users who hold it, or click View all users to see every member of the unit.
User list
The user list shows:
- Display name and user principal name for each user.
- The licenses assigned to each user.
- Pagination controls (25 users per page).
You can filter the user list by a specific license or view all users in the unit.
Unassigned bucket
When enabled on a dimension, users who do not match any unit filter appear in a synthetic Unassigned unit. This ensures every licensed user is accounted for in exactly one bucket, giving you a complete picture without gaps.
How dimensions and units work
A dimension represents one way to slice your user base (for example, “Country” or “Department”). Each dimension contains one or more units that define which users belong to each slice.
Users are evaluated against units in sort order. The first matching unit wins. Each user appears in at most one unit per dimension. This is called partitioned allocation.
Reports are pre-computed during the analytics materialization cycle, not at query time. This means report reads are fast, but changes to dimension configuration or directory data are reflected after the next materialization run.
How to configure
Creating a dimension
- Open the Reporting page from the main navigation.
- Click Create dimension.
- Enter a dimension name (up to 80 characters, must be unique within your tenant).
- Choose whether to include an Unassigned bucket for users that match no unit.
- Choose whether to include free licenses in seat counts.
- Add one or more units with filters.
Adding units
Each unit needs:
- Name (up to 80 characters, unique within the dimension).
- Filter that defines which users belong to this unit.
Editing and deleting
- Updating a dimension replaces its entire unit list. The system uses optimistic concurrency, so concurrent edits are detected and rejected with a conflict error.
- Deleting a dimension removes it and all associated report data.
How to configure filters
Filters match users based on Entra ID attributes. You can build simple single-attribute filters or combine them with and/or logic using the filter builder.
Supported attributes
| Standard attributes | Extension attributes |
|---|---|
country |
extensionAttribute1 through extensionAttribute15 |
companyName |
|
department |
|
officeLocation |
|
city |
|
state |
|
usageLocation |
|
jobTitle |
|
employeeType |
Filter operators
| Operator | Description | Value type |
|---|---|---|
equals |
Exact match (case-insensitive) | Single string |
notEquals |
Attribute exists and differs from value | Single string |
startsWith |
Prefix match (case-insensitive) | Single string |
contains |
Substring match (case-insensitive) | Single string |
in |
Attribute equals any value in the list (up to 100 entries) | Comma-separated values |
notIn |
Attribute exists and equals none of the values | Comma-separated values |
All comparisons are case-insensitive. Users with a missing or null attribute value do not match any operator.
Compound filters
Combine multiple conditions by choosing Match all rules (AND) or Match any rule (OR). Use the + Rule button to add conditions and + Group to nest filter groups. Compound filters can be nested up to 5 levels deep, with a maximum of 50 individual conditions per unit filter.
Examples:
- Match users in Germany:
country equals "Germany" - Match users in Germany or Austria:
country in "Germany, Austria" - Match sales department in EMEA offices: match all of
department equals "Sales"andcountry in "Germany, Austria, Switzerland"
Limits
| Limit | Value |
|---|---|
| Dimensions per tenant | 20 |
| Units per dimension | 200 |
| Filter nesting depth | 5 |
| Conditions per unit filter | 50 |
Values per in/notIn operator |
100 |
| Dimension name length | 80 characters |
| Unit name length | 80 characters |
Optimization breakdown by unit
When optimization data is available, each dimension also shows a savings leaderboard that ranks units by estimated reclaim value. The leaderboard table includes:
- Rank by savings amount (top units are visually accented).
- Opportunity count per unit.
- Per-action breakdown columns: Remove, Downgrade, Add-ons, Review.
- Estimated savings in the tenant’s configured currency (monthly or annual toggle).
- Visual breakdown pip bar showing the proportion of each action type.
Click a unit row in the leaderboard to filter the opportunity list to only that unit’s members. Click again to deselect and return to the full opportunity list.
Units with no optimization opportunities do not appear in the leaderboard. An Unassigned unit (when enabled on the dimension) captures savings from users who matched no unit filter, ensuring the full savings picture is accounted for.
Prerequisites
- Directory sync must be active and healthy for user attribute data to be available.
- The report units feature must be enabled in the deployment configuration.