This report provides a detailed breakdown of milestone allocation conflicts: fix these before you invoice for managed service providers.
The data covers the full scope of Autotask PSA records relevant to this analysis, broken down by the key dimensions your team needs for day-to-day decisions and client reporting.
Who should use this: Project managers, operations leads, and MSP owners tracking delivery
How often: Weekly for status updates, milestone dates for escalation, monthly for portfolio review
With 5 out of 47 milestones carrying allocation conflicts, roughly 1 in 10 billing events in the pipeline has a data problem. The $28,500 in attached revenue won't flow cleanly through your billing cycle until each conflict is resolved. The 3 charges conflicts compound this: those charge records may be posting to the wrong contract, creating both an overage on one contract and an undercharge on another.
EVALUATE ROW("TotalCharges", COUNTROWS('BI_Autotask_Charges'), "WithProject", COUNTAX(FILTER('BI_Autotask_Charges', NOT(ISBLANK('BI_Autotask_Charges'[project_id]))), 1), "WithContract", COUNTAX(FILTER('BI_Autotask_Charges', NOT(ISBLANK('BI_Autotask_Charges'[contract_id]))), 1), "Unallocated", COUNTAX(FILTER('BI_Autotask_Charges', ISBLANK('BI_Autotask_Charges'[project_id]) && ISBLANK('BI_Autotask_Charges'[contract_id])), 1))
| Status | Count | Share | Billing Implication |
|---|---|---|---|
| Incompleted | 31 | 66.0% | Work in progress — not yet billable. Allocation conflicts here delay future invoicing. |
| Completed | 12 | 25.5% | Work done — should be ready to invoice. Any conflict here is blocking a live billing event. |
| Approved for Billing | 4 | 8.5% | Approved and queued for invoicing. Conflicts in this group cause immediate invoice errors. |
The most urgent group is Approved for Billing. Any allocation conflict on those 4 milestones will surface as a billing error the moment your team tries to generate the invoice. Completed milestones with conflicts are one approval step away from the same problem. Incompleted milestones give you the most lead time to fix allocation data before the milestone reaches billing.
EVALUATE SUMMARIZE(
'BI_Autotask_Contract_Milestones',
'BI_Autotask_Contract_Milestones'[status_name],
"Count", COUNTROWS('BI_Autotask_Contract_Milestones'),
"Total_Amount", SUM('BI_Autotask_Contract_Milestones'[amount])
)
Allocation conflicts in Autotask milestones typically come from a small set of data entry or process gaps. Understanding the root cause determines the fix. The three most common patterns are: a contract reference mismatch (the milestone points to a contract that was renegotiated or replaced), a missing allocation record (the milestone was created without linking it to a charge code), and a duplicate allocation (two records claim the same milestone, causing a conflict in the billing engine).
The milestone's contract_id no longer matches an active contract. This happens when a client's contract is renewed or restructured and the project milestone isn't updated to reference the new contract. The billing engine sees two different contract references and flags the conflict rather than guessing which one to use.
Some milestones were created without a corresponding charge record in the allocation table. Without that record, Power BI can detect the milestone has an amount but no allocation target. The milestone amount stays in limbo: it won't be invoiced and it won't show as an error in the PSA interface until you look at the billing queue directly.
This is the charges allocation conflict captured in the KPI above. The charge record and the milestone record each exist, but they reference different contracts. In practice this means the charge might invoice under Contract A while the milestone completion is tracked under Contract B — your revenue reporting will show a discrepancy even if the invoice goes out.
Occasionally a project is created in Autotask and milestones are added before the project is formally linked to a client contract. These milestones carry a project_number but no contract_name, which the allocation measure treats as a conflict because there is no billing target to resolve against.
EVALUATE TOPN(20,
SUMMARIZE(
'BI_Autotask_Contract_Milestones',
'BI_Autotask_Contract_Milestones'[project_name],
'BI_Autotask_Contract_Milestones'[title],
'BI_Autotask_Contract_Milestones'[status_name],
'BI_Autotask_Contract_Milestones'[amount],
'BI_Autotask_Contract_Milestones'[date_due]
),
'BI_Autotask_Contract_Milestones'[amount], DESC
)
Resolution follows a clear priority order: fix Approved for Billing milestones first, then Completed milestones, then Incompleted. Within each group, sort by amount descending to protect the highest-value billing events first. Each conflict type has a specific fix in Autotask.
In Autotask, open the project, navigate to the milestone, and check the Contract field. If it references an expired or replaced contract, update it to the current active contract. Save and re-run the billing check. This resolves the contract reference mismatch type and is usually a one-minute fix per milestone.
For milestones with no charge record, go to the project's Charges tab and add a charge line that references the milestone. Set the charge type to Fixed Fee or as required by the contract. Link it to the correct contract and save. The allocation conflict measure will clear on the next data refresh.
For charges conflicts, open the charge record and verify its Contract field. If it differs from the milestone's contract, update the charge to match. If both contracts are legitimately involved (for example, a split-contract project), consult your project manager before changing either reference, as the split may be intentional and require a different resolution path.
For projects without a contract link, go to the project's Details tab and add the Contract association. Once saved, any milestones already on the project will inherit the contract reference. Going forward, make it a team standard to link a contract before creating milestones — this prevents the category of conflict entirely.
Schedule a recurring task (weekly or before each billing cycle) where a billing coordinator filters the milestone report to show only Completed and Approved for Billing milestones with a non-zero conflict count. This five-minute check catches new conflicts before they reach the invoice queue. With Power BI connected to your live Autotask data, this report refreshes automatically.
Common questions about milestone allocation conflicts in Autotask and Power BI.
An allocation conflict means the billing data attached to a milestone doesn't resolve to a single, unambiguous billing target. Either the contract reference is missing, it points to a cancelled or replaced contract, or the charge record references a different contract than the milestone itself. The PSA can't auto-invoice without a clean single-contract reference.
Autotask doesn't surface allocation conflicts as visible warnings on the project board. They only become visible when you try to generate an invoice and the billing engine fails to match the milestone to a contract — often showing a blank or error invoice. Power BI catches these proactively by cross-checking milestone and charge records before billing runs.
The Milestone Revenue measure sums the amount field on all milestone records. When filtered to milestones with a non-zero Milestone Allocation Conflict flag, the result represents the total billing value of milestones that cannot be cleanly invoiced in their current state. In the demo data this is $28,500 across 5 conflicted milestones.
Yes. Add a visual to your Power BI report with project_name on the rows axis and Milestone Allocation Conflict as the value. This gives you a per-project conflict count. You can add a filter to show only projects with a conflict count greater than zero, giving your billing team a clean action list sorted by project.
At minimum, run it the week before your billing cycle closes. For teams with active project portfolios (10 or more concurrent projects), a weekly check is the right cadence. With Power BI connected to live Autotask data, the report refreshes on schedule automatically — no manual data pull needed.
Connect Proxuma Power BI to your PSA, RMM, and M365 environment, use an MCP-compatible AI to ask questions, and generate custom reports - in minutes, not days.
See more reports Get started