The full pipeline on retail and reseller sales data: cleaning and loading, building a semantic model, writing DAX measures, then designing an interactive report and publishing it.
Shaped source data in Power Query and loaded a seven-table reseller sales model — Product, Region, Reseller, Sales, Salesperson, SalespersonRegion and Targets.
This is the stage where data quality is decided. A column left as text instead of a numeric type loads without complaint, then breaks every measure written against it two steps later.
DIVIDE was used rather than the division operator because it returns blank instead of an error when the denominator is zero or blank. One missing target would otherwise break the whole visual. The measure was formatted as a percentage to two decimal places.
The resulting table shows every salesperson with a negative variance — which is a filter context problem, not a performance problem. The view has no time filter applied, so it compares partial-period sales against a full-period target. A measure is only as meaningful as the context around it.
Built a three-page report — Overview, Profit and My Performance — and published it to the Power BI Service. A Region slicer with ten values drives the page, cross-filtering links the visuals, and a matrix drills from fiscal year to quarter to month.
The finding: order volume grew every year while profit margin collapsed, from 4.07% in FY2019 to minus 0.52% in FY2020. FY2020 sold more and lost money doing it, because cost grew faster than sales.
That is exactly the question a Region slicer exists to answer next — which regions drove the loss, and is it concentrated or general?
A separate report over a customers, orders and products model — combining a pie chart of quantity by category, a column chart of revenue by product, and a map visual keyed on city with revenue as bubble size.
The map and filled map visuals were disabled by the lab environment's security policy. The field wells were configured correctly but the visual could not render — an environment restriction rather than an incomplete configuration.