License Metrics: Per User, Per Computer, Per Core, Per Processor
A license measures consumption in a specific unit — one user, one computer, one core, one processor. Choosing the right metric on the license record is the single most important data quality task in SAM, because the metric determines how much capacity the engine credits and how much consumption it counts.
This page lists the available license types, what unit each one consumes, and how to choose between them.
License Type Flags
Every license type belongs to one of four metric flags. The engine uses the flag to select which field on each transaction to count.
| Flag | Metric | What It Counts |
|---|---|---|
| 1 | Per Computer or Server | One unit per device with the product installed |
| 2 | Per User | One unit per named user assigned to the product |
| 3 | Per Physical Core | Total physical cores on devices running the product |
| 4 | Per Physical Processor | Total physical processors on devices running the product |
All Built-In License Types
The full set of license types shipped with xAssets, grouped by flag:
Flag 1 — Per Computer or Server
| Code | Display Name | When To Use |
|---|---|---|
SERVER |
Per Computer or Server | The default for boxed software, OS licenses, perpetual desktop products |
INSTANCE |
Per Instance | Software priced per running instance (e.g., per SQL instance) |
SUB |
Sub Component | A license that is a sub-component of a larger SKU bundle. Not for subscriptions. |
SUBSCRIPTION |
Per Subscription | A periodic per-device subscription (rare; see notes below) |
FREE |
Free | Free software — generates consumptions but no grants |
UNKNOWN |
Unknown | Placeholder for unclassified licenses; should be resolved |
Flag 2 — Per User
| Code | Display Name | When To Use |
|---|---|---|
USER |
Per User | The default for SaaS subscriptions: M365 user plans, Adobe Creative Cloud, Salesforce, Google Workspace, GitHub Enterprise |
NAMEDUSER |
Per Named User | When the license is tied to a specific named individual |
CAL |
Per CAL | Microsoft Client Access Licenses |
UAL |
User Access License (Per UAL) | Microsoft User Access Licenses |
Flag 3 — Per Physical Core
| Code | Display Name | When To Use |
|---|---|---|
CORE |
Per Physical Core | Server software licensed per core (e.g., SQL Server Standard / Enterprise) |
CORE4 |
Per Physical Core (4 minimum) | Per-core with a 4-core floor per server |
CORE8 |
Per Physical Core (8 minimum) | Per-core with an 8-core floor per server (e.g., Windows Server Datacenter) |
CORE16 |
Per Physical Core (16 minimum) | Per-core with a 16-core floor per server |
VIRTUALCORE |
Per Virtual Core | Per-core counting virtual rather than physical cores |
Flag 4 — Per Physical Processor
| Code | Display Name | When To Use |
|---|---|---|
PROCESSOR |
Per Physical Processor | Older per-socket licensing (some Oracle products, legacy SQL Server) |
Choosing the Right Type
Common pitfall — subscriptions. It is easy to assume
SUBSCRIPTIONis the right type for any subscription product. It is not.SUBSCRIPTIONis per device. For per-user SaaS products like Microsoft 365, Adobe Creative Cloud, Salesforce, and Google Workspace, useUSERorNAMEDUSER. TheSUBcode is something different again — it is "Sub Component" for licenses that are part of a larger bundle.
Three quick decisions get you to the right type:
- Who is the license tied to? A specific person →
USERorNAMEDUSER. A device → continue. - Is it counted per server or per processor unit? Per server →
SERVERorINSTANCE. Per CPU unit → continue. - Per core or per socket? Per core →
CORE,CORE4,CORE8,CORE16,VIRTUALCORE. Per processor →PROCESSOR.
What the Engine Does With the Metric
The metric controls two things:
Capacity — how the license's seat count is interpreted:
| License Type | "50 Seats" Means |
|---|---|
| Per User | 50 user assignments |
| Per Computer | 50 device assignments |
| Per Core | 50 cores of capacity |
| Per Processor | 50 processors of capacity |
Consumption — how each install is counted:
| License Type | Each Install Counts As |
|---|---|
| Per User | 1 per user (not per device) |
| Per Computer | 1 per device |
| Per Core | the asset's CPUCores value |
| Per Processor | the asset's PhysicalProcessors value |
The licensing position is computed by summing capacity and summing consumption in the right metric and comparing.
Per-user counts users, not installs. A title installed on three machines all logged in by the same user counts as one user license consumed, not three. The engine groups consumption by custodian for per-user license types.
The same title installed on three machines logged in by three different users counts as three user licenses.
Grant Transaction Fields
When the engine posts a grant, it populates a different field on the transaction depending on the license type:
| License Type | Grant Field Populated |
|---|---|
| Per User | Rights = 1 |
| Per Computer | CoreUnits = 1 |
| Per Core | CPUCores = N (asset's core count) |
| Per Processor | PhysicalProcessors = N |
This matters when querying transactions directly — to count consumption across mixed license types you must select the right field for each license type. The Licensing Position queries handle this automatically.
Where the Type Comes From
For each transaction, the engine looks up the license type from a different place:
| Transaction Type | License Type Comes From |
|---|---|
| Consumption (Type 11) | The product record |
| License Evidence (Type 12) | The license record |
| Grant (Type 13) | The license record |
This means a product can have a "default" license type (set on the catalog entry) that consumptions use, while individual licenses can be of a different type if you genuinely have a mix of contracts.
Health Check Queries
Two diagnostic queries on the License Dashboard → Licensing Calculation Steps tab tell you when license types are wrong or missing:
- Software Licenses missing LicenseType — license records that have no type set; the engine will exclude them
- Software Products missing LicenseType — catalog entries with no default type; consumptions cannot be metered correctly
If either count is non-zero, fix it before relying on the position.
Related Reading
- Software Licenses — entering license records with the right type
- Multi-License Coverage — combining licenses of different types
- Affinity vs Requirements — how the engine prefers core licenses for small servers and processor licenses for big ones