AzClean Reporting: turn findings into something people act on
A CSV of findings is not a report. It is a thing you still have to explain.
AzClean Reporting takes toolkit exports and produces three outputs for three audiences: a client-ready HTML report, a Markdown summary for tickets, and a Teams or Slack digest. White-label it as your own.
Three formats because three audiences
Sending one audience another audience's format is how good findings get ignored.
HTML for whoever decides. Findings ranked by monthly cost, caveats stated before the numbers rather than in a footnote, and a recommended, deferred and ignore split so the document ends in decisions rather than data. This is the one that goes to a client or to finance.
Markdown for whoever does the work. One block per finding, paste-ready into a ticket, with the resource ID and the check that produced it. No prose.
A digest for the channel. Four lines and a number. Total monthly cost of open findings, the change since last run, the top three, and a link. Nobody reads a report in Teams; they read a number and click if it moved.
Schema-agnostic on purpose
It does not require a particular column layout. Point it at a CSV, tell it which column holds the cost and which holds the resource, and it works. That means it also works on output from your own scripts, an Azure Resource Graph export, or a CSV somebody sent you.
New-AzCleanReport -Path ./findings/*.csv `
-Format Html,Markdown,Teams `
-CostColumn 'USD/month' `
-LogoText 'Your Company' `
-OutputPath ./reports
White-labelling
-WhiteLabel removes every ACloud.Solutions reference and -LogoText puts
yours in its place. This exists because consultants and managed service
providers were the people asking for it, and a report carrying someone else's
brand is not much use when you are the one billing for the work.
The licence covers handing white-labelled deliverables to your clients. The tiers differ on that point, and the full terms ship inside the download.
Caveats, up front
The report puts the caveats above the numbers deliberately. Reservations, savings plans, negotiated discounts and Hybrid Benefit all move the real figure, so the totals are for prioritising work rather than for billing.
That framing is not modesty, it is self-defence. An estimate presented as an estimate is useful. The same estimate presented as a guaranteed saving is a hostage, and you only have to be caught once.
Related
Input usually comes from the AzClean Toolkit, though any CSV works. Microsoft's Cost Management exports documentation covers getting actual billed spend out of Azure if you want to reconcile the estimates against invoices.
Questions
Does it need the toolkit?
No. It is schema-agnostic, so it works with any CSV where you can name the cost and resource columns. Toolkit output is simply the case it was built against.
Can I send the Teams digest without a webhook?
No, the digest needs an incoming webhook URL for the channel. HTML and Markdown are written to disk and need nothing.
Does the HTML report need an internet connection to view?
No. Styling and any images are inlined, so the file works from disk or as an email attachment. That matters when a client's mail gateway strips external references.
Can I change the recommended and deferred thresholds?
Yes. The split is driven by parameters rather than hardcoded, because what counts as worth doing differs between a startup and a company with a change board.
Will it show me savings I have already made?
Only if you keep the previous run. The digest reports the change since the last export, so the trend is available if you schedule it and store the output.