Cloud cost and FinOps: Azure

Sefism.

Chapter 02

Reading the bill and tagging

The cost tool and detailed export on your cloud, tags and labels, a tagging policy template, enforcement, untaggable spend and your first billing query.

Cost analysis

Also called Azure Cost analysis, smart views, Microsoft Cost Management

What
The Azure portal view for exploring cost at any scope, with smart views, grouping by service, resource, location or tag, actual or amortised cost, and forecasts.
Why
It is where teams self-serve their numbers, and saved views can be emailed on a schedule.

Watch out

Reading one subscription and missing shared services billed in another.

Cost Management exports

Also called exports, cost details, FOCUS export, Parquet

What
Scheduled daily or monthly exports to Azure Storage, as CSV or Parquet: actual, amortised and FOCUS cost details, price sheets and reservation data, split into parts with a manifest.
Why
The data source for reports, the FinOps toolkit and custom tools. The portal can rerun past months, up to 13 months back.

Watch out

Building reports on manual CSV downloads nobody refreshes.

Tags and labels for cost

Also called tags, labels, resource tags, cost allocation tags

What
Key-value pairs on resources, such as team=payments, that flow into billing data so cost can be grouped by team, product, environment or cost centre.
Why
They add the business context the cloud does not know, within the boundaries accounts or projects already give.

Watch out

Free-form keys, so Team, team and owner_team each hold a third of the cost.

Tagging policy

Also called tag standard, labelling policy, tag governance

What
A short written agreement on required tag keys, allowed values, who owns each list, where tags are applied, how compliance is measured and what happens to untagged resources.
Why
It turns tagging from a hope into a measurable standard teams can follow.

Watch out

Thirty required keys nobody applies instead of five everybody does.

Tagging policy template

Also called tag policy example, required tags, tag schema

What
A starting template with five required keys, their allowed values, and how the policy is applied and measured.
Why
Copy it, change the values to your organisation's, and agree it with finance and team leads.
YAML
required:
  cost-center: [cc-1001, cc-1002, shared]
  team: [payments, search, platform]
  env: [prod, staging, dev, sandbox]
  app: free text, lowercase, hyphens
  owner: team email or chat channel
format: lowercase keys and values, no spaces
applied: in IaC modules, checked in CI
measured: % of cost with all keys, monthly
untagged: owner notified, removed after 14 days
review: twice a year with finance

Watch out

Leaving out the owner key, so nobody can be asked about a resource.

Azure Policy and tag inheritance

Also called tag inheritance, Azure Policy tags, require a tag, inherit a tag

What
Azure Policy can require tags or copy them from the resource group. Cost Management tag inheritance copies subscription and resource group tags onto resources in cost data only.
Why
Resource group tags plus inheritance is a simple way to get most cost tagged.

Watch out

Expecting inherited tags on the resources themselves: other services and policies cannot see them.

Untaggable and shared spend

Also called untagged cost, unallocated cost, shared cost

What
Cost that cannot carry your tags: support, taxes, some data transfer, marketplace charges, centrally bought commitments and shared platforms.
Why
Reporting it openly keeps team totals adding up to the invoice and shows where split rules are needed.

Watch out

Leaving untagged cost out of team reports, so totals never match the bill.

Billing queries in SQL

Also called cost query, DuckDB, Athena, BigQuery, FOCUS query

What
SQL over a billing export answers what the console cannot: cost by tag and service, top resources, week-on-week change. This example runs on FOCUS data, so it works for any provider.
Why
Three saved queries (by service, by team with an untagged bucket, top resources) cover most weekly questions.
SQL
SELECT COALESCE(Tags['team'], 'untagged') AS team,
  ServiceName,
  SUM(EffectiveCost) AS cost
FROM focus
WHERE ChargePeriodStart >= DATE '2026-09-01'
  AND ChargePeriodStart < DATE '2026-10-01'
GROUP BY ALL
ORDER BY cost DESC;

Watch out

A query that silently drops rows with no tag, so the total is smaller than the invoice.

02 · Reading the bill and tagging2 / 10