The Default Rule Set
The shipped rule set is what runs out of the box. Every customer starts here, and most stay here. This page documents every rule and its weight.
Calculated Fields
The shipped calculated fields derive boolean flags used by the per-server-vs-per-core affinity rules below.
Set Consumption.PrefersServerLicense = IIF(Consumption.CPUCores >= 16, 1, 0)
Set Consumption.PrefersCoreLicense = IIF(Consumption.CPUCores <= 8, 1, 0)
Set License.IsServerLicense = IIF(License.IsCoreLicense = 0, 1, 0)
Set License.IsCoreLicense = IIF(License.IsCoreLicense = 1, 1, 0)
A consumption "prefers server" if its core count is high (a per-server license is more economical for big boxes); a consumption "prefers core" if its core count is low (a per-core license is more economical for small boxes). Licenses are tagged as either server-style or core-style.
The 9–15 core gap. A consumption with 9–15 cores matches neither preference — neither flag is set, neither bonus fires. This is intentional: very-small and very-large boxes have a clear best-fit; mid-range boxes are left to be picked on the other affinity dimensions (department, location, custodian). If you have many 9–15 core machines and want them to nudge one way or the other, lower the
>= 16threshold or raise the<= 8threshold.
Why the
IsCoreLicenseself-reference. The fourthSetlooks tautological — it just copiesLicense.IsCoreLicenseto itself. It exists to force the field to be present and integer-typed on every license row before the affinity rule evaluates it. The engine throws if a referenced field is missing, and licenses where the underlying flag is null would otherwise break the comparison. Leave it in unless you replace the source field.
Requirements
The shipped requirement enforces location scoping:
Requirement Consumption.LocationID within License.LocationID
A license set to "London" can only cover consumptions whose asset is in London (or in a child of London — Floor 1, Floor 2, etc.). A license with no location set has no restriction.
Affinity Rules
The shipped affinity rules and their weights, in roughly the order they contribute to total score:
| Rule | Weight | What It Does |
|---|---|---|
Affinity Consumption.DepartmentID = License.DepartmentID |
3000 | Same department exact match |
Affinity Consumption.DepartmentID within License.DepartmentID |
1500 | Department hierarchy match |
Affinity Consumption.CPUCores = License.CoreUnits |
1500 | License CPU count exactly matches consumption |
Affinity License.CustodianID = Consumption.CustodianID |
1000 | Custodian on license matches consumption custodian |
Affinity Consumption.PrefersServerLicense = License.IsServerLicense |
1000 | Big server prefers a per-processor/per-server license |
Affinity Consumption.PrefersCoreLicense = License.IsCoreLicense |
1000 | Small server prefers a per-core license |
Affinity Consumption.LocationID = License.LocationID |
800 | Location exact match |
Affinity Consumption.LocationID within License.LocationID |
400 | Location hierarchy match |
Affinity Consumption.CostCentreID = License.CostCentreID |
300 | Cost centre exact match |
Affinity Consumption.CostCentreID within License.CostCentreID |
200 | Cost centre hierarchy match |
How the Weights Stack
The weights are deliberately spaced so that the most important matches dominate, but lower-priority matches still influence ties.
| Match | Score |
|---|---|
| Department exact + custodian + location exact | 3000 + 1000 + 800 = 4800 |
| Department exact + location exact | 3000 + 800 = 3800 |
| Department within + location exact | 1500 + 800 = 2300 |
| Custodian only | 1000 |
| Location exact only | 800 |
| Cost centre only | 300 |
| Nothing matches | 0 |
A license that matches department, custodian, location exact, and cost centre exact ends up at 5800 versus a license matching only department exact at 3000. Both are eligible (assuming no requirement excludes them); the higher-scoring one is allocated first.
Tie-Breaking
When two licenses end up with identical affinity scores, the lower AssetID wins. In practice this means whichever license was created first. This is deterministic — recalculations produce the same result every time.
When To Adjust Weights
Adjust a weight when the default is producing allocations that consistently surprise you. Examples:
- Custodian should outrank department for your environment (e.g., named-user policies dominate org structure) → boost custodian to 4000, leave department at 3000
- Location should outrank department (e.g., regional purchasing) → boost location exact to 4000
- Cost centre is the primary financial dimension → boost cost centre exact to 2000
Keep adjustments proportional. Doubling one weight is a meaningful change; multiplying by 100 produces a rule that dominates everything else and effectively converts an affinity into a near-requirement (high weight does not actually exclude — only Requirement does that).
When To Add a New Affinity Rule
Add a rule when you have a new dimension that should influence allocation. Examples:
- A custom
ProjectorBusinessUnitfield on assets and licenses - A
LicensePoolflag where pool A's licenses prefer pool A's machines - A criticality scoring where production licenses prefer production assets
Adding requires both data and rule:
- Ensure the field exists on both consumption and license records (via the data source queries — may need transformation editing)
- Add the affinity rule referencing both fields
- Pick a weight that fits the priority you want it to have
When To Add a New Requirement
Adding a requirement is more dangerous than adding affinity. A bad requirement excludes valid candidates and produces phantom deficits. Add requirements when:
- You have a regulatory or contractual constraint that must be enforced (Adobe-by-department; restricted-jurisdiction software)
- You can express the constraint as an exact-match comparison
- You have tested it in a non-production environment
For per-product requirements (e.g., "Adobe must stay within department"), use the scoping pattern in Per-Product Scoping — do not add unconditional requirements.
Related Reading
- How Rules Are Evaluated
- Per-Product Scoping — the standard pattern for conditional requirements
- Hierarchy Fields and the Within Comparator — how
withinworks - Concepts: Affinity vs Requirements