VDI Showback and Cost Allocation: Tools, VDI Chargeback Models, and How to Split AVD Desktop Costs
August 2026 · Costanalyst
projected this month if unattended
Spend by team
Budget forecast
VDI cost allocation splits a virtual desktop estate across departments using one of three models: per named user, per concurrent session, or per consumed resource hour. Showback reports that number to each department; chargeback moves it on the books. The hard part is not the model, it is that a VDI bill mixes per-user licensing with per-consumption infrastructure, and pooled session hosts are billed per virtual machine rather than per person sitting at a desktop.
Virtual desktops are one of the few workloads where finance already has a natural unit to charge on. Everybody understands "a desktop". That makes VDI look like the easiest chargeback in the building, right up until you open the Azure invoice and discover it does not contain the word "desktop" anywhere.
What it contains is virtual machines, managed disks, egress, a file share, some log ingestion, and a licensing line. Turning that into a defensible per-department number is the whole exercise, and it is worth doing properly because VDI estates are large, long-lived, and get renegotiated on renewal by a CFO who wants to know what each business unit is actually consuming.
What a VDI bill is actually made of
Take Azure Virtual Desktop as the worked example, because Microsoft documents its cost structure more explicitly than most vendors do. Microsoft states that Azure Virtual Desktop costs come from two sources: underlying Azure resource consumption and licensing. Those two behave completely differently for allocation purposes, which is the root of most of the difficulty.
| Cost component | What it is | How it scales | Allocation difficulty |
|---|---|---|---|
| Session host VMs | The compute running the desktops. Microsoft notes VM instances usually cost the most | Per VM hour, not per user | Hard on pooled hosts, easy on personal hosts |
| Managed disks | OS disks and any data disks on each session host | Per provisioned GB | Follows the session host |
| Network bandwidth | Egress from session hosts, including traffic to Microsoft 365 services | Per GB, spiky and user-driven | Rarely attributable directly |
| Profile storage | FSLogix profile containers on Azure Files or Azure NetApp Files | Per GB provisioned, roughly per user | Genuinely per user, so allocate directly |
| App Attach storage | Application package storage | Per GB, shared | Shared, needs a split rule |
| Monitoring | AVD Insights log data in Azure Monitor | Per GB ingested | Shared platform cost |
| Identity | Microsoft Entra ID tiers, plus domain controller VMs if you run AD DS | Flat or per VM | Shared platform cost |
| Licensing | Eligible per-user licenses, or per-user access pricing for external users | Per user, per month | Easy, and the only line already shaped like a chargeback |
Notice the asymmetry. Licensing is already priced per person. Everything else is priced per resource. A chargeback model has to reconcile those two shapes, and the model you pick is really a decision about which shape wins.
Why VDI is harder to allocate than ordinary cloud spend
Pooled, multi-session desktops create exactly the problem a shared Kubernetes cluster creates, in different clothing. The provider bills you for the session host virtual machine. Twelve people from four departments used that virtual machine yesterday. The invoice has no idea who they were.
Personal (persistent) desktops avoid this entirely, because one VM maps to one person and you can tag it with their cost center. That is why estates with a mix of personal and pooled hosts need two allocation rules rather than one, and why "we will just tag everything" quietly fails on the pooled half.
Three other things make VDI unusual:
- Consumption does not track headcount. A department with 200 licensed users but 40 concurrent sessions at peak consumes far less compute than one with 100 users who are all logged in from 8am. Charging on license count and charging on consumption produce very different bills for the same estate.
- Autoscaling makes the denominator move. If you scale session hosts to demand (and you should, since Microsoft points at autoscale as the primary compute mitigation), your cost per desktop hour changes month to month. A rate card fixed in January is wrong by March.
- Reserved capacity distorts the picture. Session hosts are a textbook case for Azure reserved VM instances or savings plans, because the baseline is predictable. The discount lands on the billing account, not on the department that made the baseline predictable.
The three VDI chargeback models, compared
Every VDI chargeback scheme in the wild is one of these three, or a blend.
| Model | How the rate is built | Best for | Where it breaks |
|---|---|---|---|
| Per named user | Total estate cost divided by entitled users, charged monthly per assigned account | Persistent desktops, regulated environments, simple budgeting | Charges for people who barely log in, so departments hoard licenses they do not use and then complain about the bill |
| Per concurrent user | Rate built on peak or average concurrency, allocated by each department's share of concurrent sessions | Pooled multi-session estates, shift-based workforces, call centers | Needs reliable session data, and departments dispute whose peak drove the capacity you had to build |
| Per consumed resource hour | Session minutes multiplied by the vCPU and memory footprint of the host pool, priced at an internal rate | Mature FinOps programs that already run showback and want behavior to change | Most accurate and least intuitive. Finance has to explain it every month, and light users see a bill that varies |
Pick per named user if the point is budget predictability. Pick per consumed resource hour if the point is to make a department turn off desktops nobody uses. Those are different goals and the model should follow the goal, not the other way around.
How do you allocate VDI costs to departments?
Allocate the directly attributable lines first, then split the shared remainder on a driver each department can influence. In practice that means tagging personal session hosts and profile storage to a cost center, splitting pooled host pool cost by each department's share of session time, and distributing platform costs like monitoring, identity, and image storage proportionally on top.
The sequence that works:
- Separate host pools by consuming group where you reasonably can. This is the single highest-leverage decision, and it is an architecture decision, not a reporting one. A host pool dedicated to the contact center is trivially allocatable. A single company-wide pool is a splitting exercise forever.
- Tag every resource with a cost center at deployment. Session hosts, disks, file shares, network resources. Microsoft supports tagging AVD resources for exactly this reason. Retro-tagging an estate is a week of work nobody schedules.
- Pull session data. Login and logoff records give you session minutes per user, and user to department mapping comes from your directory. This join is the actual work, and it is where most VDI chargeback projects stall.
- Choose one driver for the pooled remainder. Session minutes is the defensible default. Concurrent peak is defensible if you sized capacity for peak. Headcount is defensible only when session data does not exist.
- Publish it as showback for at least one quarter before charging anybody. The first month of numbers will be wrong somewhere, and you want to find that out before it hits a departmental P&L.
What is the difference between showback and chargeback in VDI?
Showback reports each department's virtual desktop cost without moving money; chargeback debits the department's budget for it. The mechanics of calculating the number are identical. What changes is the scrutiny: the moment a charge is real, someone in that department audits your session data, questions the rate, and asks why the finance system says something different. Showback is where you earn the right to charge back.
We cover the general distinction and its governance implications in more depth in the guide to showback vs chargeback. For VDI specifically, the extra wrinkle is licensing: a per-user license is a real, external, contractual cost that finance can already see, so departments accept being charged for it long before they accept being charged for compute they cannot picture.
How do you charge back Azure Virtual Desktop costs?
Use tags and subscription or resource group boundaries to attribute what you can, then use Microsoft Cost Management cost allocation rules to reassign the shared platform costs to the consuming departments. Microsoft is explicit that cost allocation does not affect your billing invoice and that all chargeback processes happen in your organization outside Azure. The rules move the number in reporting; your finance system does the rest.
The details of those rules matter more for VDI than for most workloads, and several of them surprise people:
- Availability is limited by agreement type. Cost allocation rules require a Microsoft Customer Agreement (MCA-E or MCA-online) or an Enterprise Agreement, and you need Enterprise Administrator or billing account owner rights to create one.
- Sources and targets are subscriptions, resource groups, or tags. That is the whole vocabulary, which is why your host pool architecture and tagging discipline determine what is possible.
- Splits are either manual whole-number percentages or proportional. The proportional options prefill from the targets' total, compute, storage, or network cost, or distribute evenly.
- Prefilled percentages freeze. Microsoft states that once set, the percentages do not change and all ongoing allocations use them until you manually update the rule. In an autoscaled VDI estate where usage genuinely moves, that is a maintenance task somebody has to own.
- Purchases are not supported. Cost allocation explicitly does not cover purchases, including reservations and savings plans. Since reserved VM instances are the standard way to cut session host cost, the discount vehicle for your largest VDI line cannot be allocated by these rules at all. You handle it in your own model.
- Timing is not instant. Rules process in creation order and can take up to 24 hours to take effect; edits can take up to two hours to reprocess.
- Downstream data support is uneven. Allocation data appears in the Usage Details download and in Exports under a
costAllocationRuleNamecolumn, and the Cost Details API and Exports API support it, but the Usage Details API does not, and neither the Cost Management Power BI app nor the Power BI Desktop connector supports it. If your chargeback pipeline runs through Power BI, check this before you design around allocation rules.
One more that catches Enterprise Agreement customers: Microsoft notes that with cost allocation rules enabled, the unit price for reserved instance purchases shows as zero in the usage details file, and suggests using price sheet data as the workaround.
Can Azure Cost Management do VDI chargeback on its own?
It can do the reassignment, but not the calculation that VDI actually needs. Cost allocation rules move cost between subscriptions, resource groups, and tags. They do not know what a session is, cannot divide a pooled host pool by user login minutes, and cannot join Azure spend to your directory to find out which department a user belongs to. That join is the part a VDI chargeback model lives or dies on, and it happens outside Azure.
So the realistic architecture is: native cost allocation for platform and shared subscription costs, session data from AVD Insights or your VDI broker for the usage driver, directory data for the department mapping, and a cost platform or a warehouse query that puts the three together. If your estate spans clouds or includes Citrix or Omnissa Horizon licensing alongside Azure infrastructure, that assembly step is unavoidable, because no single vendor console holds all three inputs.
What tools support VDI showback and cost allocation?
There is no meaningful category of dedicated "VDI chargeback software" for cloud-hosted estates. What exists is three types of tool that each supply one input, and you connect them:
| Tool type | What it gives you | What it cannot do |
|---|---|---|
| Native cloud cost tooling | Microsoft Cost Management cost analysis, budgets, allocation rules, tag filtering | No session awareness, no directory mapping, no non-Azure spend |
| VDI platform monitoring | Session counts, login duration, host pool utilization from AVD Insights or your broker | No dollars attached, no licensing view |
| Cloud cost allocation platforms | Rule-based splitting of shared and untagged cost, team-level reporting, cross-cloud and SaaS coverage | Still needs your session and directory data as an input to be VDI-specific |
What to demand from the third category, if you buy one: rule-based allocation that does not depend on perfect tags, the ability to split one resource group across several cost centers on a percentage or metric you supply, and coverage of the licensing spend sitting next to the infrastructure. Our comparison of cloud cost allocation software works through the vendors that do this and which of them handle untagged and shared cost properly. For the virtual desktop shortlist specifically, we compare ten tools for VDI showback and cost allocation by the question that decides everything, which is whether each one reads a session-level usage driver or only sees resources.
How do you calculate cost per virtual desktop?
Divide the fully loaded monthly cost of a host pool by the number of desktops it serves, then decide whether "desktops" means entitled users or concurrent sessions. Fully loaded means session host compute, disks, profile storage, the pool's share of networking, monitoring, and identity, plus per-user licensing. Excluding licensing produces a number that looks good and that nobody in finance recognizes.
A worked shape for a pooled estate, using round numbers so the method is visible:
- Host pool compute and disks for the month: 18,000 dollars.
- Profile storage, App Attach, and pool networking: 2,400 dollars.
- Allocated share of monitoring and identity: 1,100 dollars.
- Infrastructure subtotal: 21,500 dollars.
- Total session minutes for the month across all departments: 430,000.
- Internal rate: about 0.05 dollars per session minute, or 3 dollars per session hour.
- Licensing charged separately at its actual per-user rate, because it is a per-user cost and pretending otherwise invites an argument you will lose.
A department with 62,000 session minutes is charged roughly 3,100 dollars of infrastructure plus its own license count. Every input in that calculation is one a department head can challenge and verify, which is the property that makes a chargeback survive its first quarter.
Common mistakes worth avoiding
Four failure patterns show up repeatedly in VDI chargeback programs:
- Charging on entitlement while sizing on concurrency. If you build capacity for peak concurrent sessions but bill per named user, no department has any reason to reduce peak, which is the only thing that lowers your cost.
- Ignoring the licensing split between internal and external users. Microsoft draws a firm line between internal commercial purposes, where each user needs an eligible license, and external commercial purposes, where per-user access pricing applies and is billed through your Azure subscription. Those are different cost behaviors and belong in different buckets in your model.
- Forgetting reseller and third-party invoices. Citrix, Omnissa, and image or application licensing frequently arrive as PDF invoices from a partner rather than as cloud meters. Those line items belong in the same chargeback statement as the Azure spend, so getting them into a spreadsheet with the line items intact is usually the first step before they can be allocated to anything.
- Publishing a rate card and never revisiting it. Autoscaling, reserved instance coverage, and image changes all move the real unit cost. Recalculate quarterly, and tell departments in advance when the rate changes.
Where VDI fits in a wider allocation program
VDI is a good place to start a chargeback practice and a bad place to finish one. It starts well because the unit is intuitive and the consuming departments are obvious. It finishes badly if it stays isolated, because the same departments also consume application infrastructure, data platforms, and software subscriptions, and a chargeback statement covering only their desktops answers a fraction of the question their budget holder is asking.
The mechanics generalize cleanly. Splitting a pooled host pool by session minutes is the same problem as splitting shared cloud costs by a usage driver, and the same problem as Kubernetes cost allocation by namespace. Solve it once with a rule engine that takes a driver you supply, and the desktops, the clusters, and the shared data platform all fall out of the same model. Costanalyst connects Azure, AWS, and Google Cloud billing plus your software subscriptions read-only and allocates all of it by team, which is the view a CIO needs when the question moves from "what do desktops cost" to "what does this business unit cost to run".
If you are still choosing infrastructure levers rather than reporting ones, the guide to cloud cost optimization tools covers the rightsizing and commitment automation side, which for a VDI estate usually means autoscaling session hosts and reserving the baseline before you argue about how to divide the result.
Allocation answers who pays. The other half of the job is knowing the total was right in the first place, and that is a different problem: Azure detects cost anomalies at subscription scope with a 36-hour lag, which is often too coarse to catch a host pool overrun. We work through the timing, the five-rule limit, and the concurrency-based forecast in the guide to AVD cost anomaly detection and forecasting models.
See where your cloud and SaaS money is leaking
Connect your cloud and SaaS spend read-only and see your savings in dollars. Transparent pricing, no card to start.