← Back to Portfolio

Power BI Projects

Interactive dashboards built around specific business questions, not generic charts

1

Data Jobs Skills Dashboard

An interactive Power BI dashboard analyzing job market trends, salary insights, and employment patterns in the data industry. It lets a viewer explore job postings, salaries, remote-work opportunities, hiring trends, and job benefits, with drill-through for detail on a selected role.

Power BI Power Query DAX Data Modeling Drill-Through

The main page gives a high-level overview of the data job market, with dynamic filtering and slicing across every visual.

  • Job data table: job title, yearly salary, hourly salary, and job trends
  • Stacked bar chart: highest-paying job roles by salary
  • Line chart with trend line: job trends over time
  • KPI cards: rating and total job count

A drill-through page lets a viewer go from the overview straight into detail for a selected job role.

  • Median yearly salary card and median hourly salary gauge for the selected role
  • Donut charts: work-from-home percentage, "no degree mentioned" percentage, and health insurance percentage
  • Map: geographic distribution of job postings
  • Platform stacked chart: postings across hiring platforms
  • Area chart: job types such as full-time, part-time, contract, and remote

Workflow: data collection, cleaning and transformation in Power Query, data modeling, DAX measure creation, dashboard design, drill-through implementation, and visualization polish for usability.

2

OlistEcom — 17-Question Business Dashboard

A 6-page, 28-visual Power BI dashboard built on the Gold-layer star schema of the OlistEcom data warehouse. Each page is organized around specific business questions about orders, revenue, customers, delivery, and sellers on a Brazilian e-commerce marketplace.

Power BI DAX Data Modeling Star Schema

The model sits on 4 dimensions and 3 fact tables and answers 17 business questions across six pages:

  1. Executive Overview: revenue, orders, customers, AOV, monthly revenue trend, order status split, top states by revenue
  2. Sales & Product Performance: top categories by revenue, freight-to-revenue ratio by category, top 10 products by revenue and by units sold
  3. Customer & Geography: customer and revenue concentration by state, average revenue per customer, repeat vs one-time customers
  4. Delivery & Fulfillment: average delivery time, on-time delivery rate, delivery time by state, seller shipping-deadline adherence
  5. Customer Satisfaction & Payments: review score trend, review score vs delivery time, payment method breakdown, installment distribution
  6. Seller Performance: top sellers by revenue, seller freight ratio, seller geographic distribution, late shipment rates

One unexpected finding: freight cost as a share of revenue varies much more by category than I assumed. Some categories quietly lose a far larger share of revenue to shipping, which only became visible after building the freight-ratio measure instead of looking at freight totals.

  • Unwanted auto-detected relationships: all three fact tables carry order_id, so Power BI wired direct fact-to-fact relationships. That created two paths between the same tables, and Power BI silently marked one inactive, so some slicers would not work. I deleted both, since facts should never connect directly in a star schema.
  • A hidden dimension cycle: connecting dim_geolocation to both customers and sellers created two paths to fact_order_items. I traced the cycle manually, kept the customers side active, and dropped the sellers connection. Sellers keep their own city and state columns for filtering, so nothing was lost.
  • Date relationships: DimDate[Date] is date-only while the fact timestamps include time, so I added DATEVALUE() calculated columns on each fact table to make the relationships connect.

All DAX measures live in a dedicated _Measures table to keep the model easy to navigate. The date dimension is generated inside Power BI with DAX's CALENDAR() rather than loaded from the warehouse, so the same logic is not maintained in two places.

Full model documentation and screenshots are in the GitHub repository below.