Skip to content
Reviewed by Siddharth Sharma Oct 27, 2026

Home › Guides › Data analyst portfolio projects

Tech Explained · 2026

Data Analyst Portfolio Projects in 2026: 6 Builds With Free Datasets, SQL and a Real Conclusion

Data analyst portfolio projects are small, finished analyses you publish with the code, the data source and a written conclusion, so a reviewer can judge your work in minutes. Three well documented projects beat six half built notebooks. The strongest ones end in a decision somebody could act on, not a gallery of charts.

27 October 20269 min readBy the 360 Digital Transformation Editorial Team
Key takeaways
  • Build two or three, not six. A reviewer spends about five minutes on your GitHub. Six shallow repos read as six abandoned tutorials.
  • The README is the project. If the first screen does not state the question, the data and the conclusion, the code never gets opened.
  • Pick datasets with ugly edges. The Olist set on Kaggle carries roughly 100,000 orders across nine CSV files, with missing delivery dates and two different customer ids.
  • You do not need a paid licence. Power BI Desktop is free. Microsoft's pricing page lists Power BI Pro at $14 per user per month paid yearly, which a portfolio never needs.
  • One project should prove you caught a problem nobody asked you to look for. That is what separates an analyst from a chart builder.

You finish the course, you have four notebooks, and nobody replies. The notebooks are fine. They load a clean CSV, drop two columns, plot a histogram, and stop exactly where the interesting part starts. The person who got the interview published one repo about why a logistics dashboard disagreed with the finance number, and could defend that disagreement for twenty minutes.

What Makes Data Analyst Portfolio Projects Actually Work

Picture a specific reader. A hiring manager at a mid size insurer in Pune opens twelve GitHub profiles on a Thursday evening with thirty minutes to spend. She scans for four things in order: the question, the data source, what went wrong and how you handled it, and what you decided. A 200 word README answering all four beats a 600 cell notebook.

Where most data analyst project ideas go wrong

Three failure modes repeat. The tutorial clone, meaning Titanic, Iris or an IMDB walkthrough, which a reviewer spots in two seconds; delete those. The dashboard with no question, where fourteen visuals sit on one page because the tool made them easy. And the analysis that stops at the chart.

Now the honest caveat. A portfolio rarely gets you past the first screen in India, where applications are filtered on years of experience, title and keyword match before anyone clicks a link. Projects do not fix that funnel. They fix the interview, where one real build gives you forty minutes of material.

Three numbers worth knowing before you start

Free tooling covers all six builds below, as long as you know where the ceilings sit.

2.7 GB
Maximum memory a Streamlit Community Cloud app gets, per Streamlit's own docs
$14
Power BI Pro per user per month paid yearly, which a portfolio does not need
~100k
Orders in the Olist Kaggle dataset, 2016 to 2018, across nine CSV files

From Microsoft's Power Platform pricing page, the Streamlit Community Cloud docs and the Olist dataset description, checked 27 October 2026.

The shape of a notebook exercise

One direction, ending in a picture. Nothing can be rerun or checked.

A linear notebook workflow ending in a screenshot A clean CSV feeds a Jupyter notebook, which produces a chart screenshot pasted into a README, with no tests and no rerun path. Clean CSV from Kaggle read_csv One long notebook plot Chart screenshot dead end: no rerun, no checks, no decision

The pattern in most course submissions, including the technically correct ones.

The shape of a project that gets read

A loader you can rerun, checks that can fail, and a written conclusion.

A reproducible analytics project with quality checks A raw source feeds a load script, which writes a DuckDB star schema, is validated by a checks file, and produces both a dashboard and a README conclusion, with a rerun loop back to the loader. Raw source files load.py DuckDB star schema assert checks.py fails loud model Dashboard or app write up README with thedecision rerun on new data

Same dataset, same effort, different structure. The loop is what makes it defensible.

The Six Projects at a Glance

Each build is scoped to be finishable, assuming basic SQL and a Power BI Desktop install. The stack column is deliberately boring: an hour spent choosing a tool is an hour not spent on the analysis.

# Project Stack Dataset Build time What it proves
1 Sales and delivery performance dashboard Power BI Desktop, Power Query, DAX Olist e-commerce, nine CSVs 10 to 14 hrs Dimensional modelling, not just visuals
2 Cohort retention analysis in pure SQL DuckDB CLI, one .sql file Olist orders and customers 5 to 7 hrs Window functions and clean logic
3 Data quality audit and scorecard Python, DuckDB, GitHub Actions Any open government dataset 8 to 10 hrs You find problems unprompted
4 Incremental Parquet ingestion with schema drift DuckDB, Python, shell NYC TLC trip records 8 to 12 hrs You can handle real file feeds
5 Replacing a manual monthly Excel report Python, openpyxl, GitHub Actions Ops data you generate 6 to 9 hrs Business judgement and automation
6 One decision memo, published as an app Streamlit, pandas, DuckDB Olist or TLC 10 to 15 hrs You can recommend, with uncertainty

Project 1: The Power BI Portfolio Project That Starts With a Star Schema

Almost everyone building a Power BI portfolio project loads one flat CSV and starts dragging fields. Do the opposite. Take the Olist set, which ships as nine files, and model it: a fact table of order items, dimensions for customers, products, sellers and dates, one relationship path from each dimension to the fact.

That choice is the project. When the interviewer asks why your delay measure is correct, you point at a one to many relationship and a table marked as the date table instead of guessing. Our Pune hiring manager asks this first, because it is what breaks in real reports.

Late Deliveries % =
VAR Late =
    CALCULATE (
        COUNTROWS ( 'Orders' ),
        FILTER (
            'Orders',
            'Orders'[order_delivered_customer_date]
                > 'Orders'[order_estimated_delivery_date]
        )
    )
RETURN
    DIVIDE ( Late, COUNTROWS ( 'Orders' ) )

Note DIVIDE instead of a slash. A reviewer notices, because it means you have hit a divide by zero inside a slicer before. Modelling and DAX of this kind are the backbone of 360DT's Data Analyst course, which builds this star schema live before touching a visual.

Deliverable: a .pbix file, three screenshots, and one paragraph naming the worst region for late delivery and what you would check next. Expect to be asked: why a star schema and not one wide table, what the date table does, and how the measure behaves when a filter returns no rows.

Also read: Power BI Tutorial for Beginners 2026 if you have never published a report, and Star Schema Explained for the modelling step in detail.

Project 2: Cohort Retention in One SQL File

The cheapest high signal project here. No dashboard, no notebook, no Python: one .sql file that runs against DuckDB and prints a retention matrix, plus a README explaining the numbers.

What SQL projects for data analyst roles should prove

Not JOIN syntax. The SQL projects for data analyst roles that land prove you can define a cohort without double counting, and that you reach for a window function where the alternative is a self join. Run it with duckdb :memory: < retention.sql from the folder holding the CSVs:

CREATE OR REPLACE VIEW ord AS
SELECT c.customer_unique_id                              AS cust,
       date_trunc('month', o.order_purchase_timestamp)   AS m
FROM read_csv_auto('olist_orders_dataset.csv')    o
JOIN read_csv_auto('olist_customers_dataset.csv') c USING (customer_id)
WHERE o.order_status = 'delivered';

WITH first_month AS (
  SELECT cust, min(m) AS cohort FROM ord GROUP BY cust
)
SELECT f.cohort,
       datediff('month', f.cohort, o.m)      AS month_index,
       count(DISTINCT o.cust)                AS actives,
       round(100.0 * count(DISTINCT o.cust)
             / max(count(DISTINCT o.cust))
                 OVER (PARTITION BY f.cohort), 1) AS pct_retained
FROM ord o
JOIN first_month f USING (cust)
GROUP BY 1, 2
ORDER BY 1, 2;

The subtlety worth writing up: Olist gives you customer_id, unique per order, and customer_unique_id, which identifies the person. Cohort on the wrong one and retention is near zero in every month. Document that bug. A project explaining a bug you found is worth three that never hit one.

Deliverable: retention.sql, the output table, two sentences on what the curve implies for a marketplace. Expect to be asked: why DISTINCT, what happens to the denominator if someone orders twice in month zero, and how you would make it incremental.

Project 3: The Data Quality Audit Nobody Else Is Building

This is the one I would build first if I had time for only one, because it shows what is hardest to fake. Pick an open dataset with real provenance, something off data.gov.in or a state transport feed, and write assertions that fail loudly.

# checks.py (run with: python -I checks.py)
import duckdb, sys

RULES = {
    "order_id is unique":
        "SELECT count(*) - count(DISTINCT order_id) FROM o",
    "delivery is never before purchase":
        "SELECT count(*) FROM o WHERE order_delivered_customer_date "
        "< order_purchase_timestamp",
    "freight is never negative":
        "SELECT count(*) FROM i WHERE freight_value < 0",
    "every item maps to a real order":
        "SELECT count(*) FROM i LEFT JOIN o USING (order_id) "
        "WHERE o.order_id IS NULL",
}

con = duckdb.connect()
con.execute("CREATE VIEW o AS SELECT * FROM "
            "read_csv_auto('olist_orders_dataset.csv')")
con.execute("CREATE VIEW i AS SELECT * FROM "
            "read_csv_auto('olist_order_items_dataset.csv')")

failures = 0
for name, sql in RULES.items():
    bad = con.execute(sql).fetchone()[0]
    print(f"{'PASS' if bad == 0 else 'FAIL'}  {name}  ({bad} rows)")
    failures += bad > 0

sys.exit(1 if failures else 0)

Wire it into GitHub Actions so the README badge goes red when a rule breaks. Now the repo is not a snapshot, it holds an opinion about the data. Testing data you do not control is a core data engineering habit, and a live Microsoft Fabric program drills the same pattern inside pipelines.

Deliverable: checks.py, a CI workflow, and a one page scorecard giving each rule, its pass rate and the consequence of it failing.

What usually goes wrong here
  • Checks pass on day one and never again. You tested the file you downloaded, not the feed. Pin the file version in the README.
  • Null treated as a defect. Cancelled Olist orders have no delivery date. Scope the rule to delivered orders or your scorecard is noise.
  • Everything is a warning. If nothing can fail the build, nobody believes the suite. Pick three rules that should block.

Project 4: Incremental Parquet Ingestion When the Schema Moves

The New York City Taxi and Limousine Commission publishes trip records as Parquet, one file per month, and its data page says releases run roughly two months behind to allow for vendor submissions. It also warns that columns have changed, with a congestion fee field added from 2025. A naive glob across all years therefore breaks, which is why this makes a good project.

-- Columns differ across years, so union by name instead of position.
SELECT strftime(tpep_pickup_datetime, '%Y-%m') AS month,
       count(*)                                AS trips,
       round(avg(trip_distance), 2)            AS avg_miles
FROM read_parquet('tlc/yellow_tripdata_202*.parquet',
                  union_by_name = true)
WHERE trip_distance BETWEEN 0.1 AND 100
GROUP BY 1
ORDER BY 1;

Then make it incremental: a Python wrapper that records which months are loaded, fetches only new files, and refuses to load a month twice. Idempotency comes up in nearly every data interview, and you will have an answer with a file path in it.

Deliverable: a loader, a manifest of loaded months, and a note on how many rows the distance filter drops and why. Expect to be asked: what happens when a month is republished with corrections.

Project 5: Kill a Manual Monthly Excel Report

State the scenario honestly as invented: a two person MIS team rebuilds a branch performance workbook by hand on the first working day of every month, taking six hours. Your project replaces it. Generate plausible source data, write the transformation in Python, and emit the workbook they expect, with their sheet names and number formats, because that is what real users refuse to compromise on.

Least glamorous build on the list, most likely to get a callback. Most analyst work is not a model. It is taking something somebody does badly every month and making it happen on its own. Coming from finance or operations, your domain knowledge does the heavy lifting.

Deliverable: the script, a sample workbook, a before and after timing note, and a paragraph on what you would still do by hand. Expect to be asked: how you handle the month the branch list changes.

Live course

Build these projects with a mentor watching, not alone at 1 AM

Live online·Sat–Sun, 8–11 PM IST·70+ hrs·Rs 24,999

Ten weeks of live weekend classes covering Python, SQL, advanced Excel and Power BI, with preparation for the Microsoft PL-300 certification. Includes hands on projects, mentor support and placement guidance.

Explore the course
Data Analyst Course: Excel, SQL, Python & Power BI (PL-300)

Project 6: One Decision Memo, Published as an App

The hardest and most differentiating build, because it ends in a recommendation rather than a visual. Pick one question with a real answer, such as whether free shipping above a threshold pays for itself on the Olist data, and write two pages: question, method, number, uncertainty, recommendation. Then publish a Streamlit app that lets a reader move the threshold.

Streamlit's docs cap a Community Cloud app at 2.7 GB of memory and 2 CPU cores, and apps with no traffic for 12 hours go to sleep. Both are fine here. Precompute aggregates into a DuckDB file instead of reading raw CSVs at startup and the sleeping app wakes in seconds.

My view on the AI angle: bolting a chatbot onto this adds nothing a reviewer values, because the hard part was the margin maths. To show you can work with large language models, make that a separate project with its own retrieval and evaluation story, which the AI Engineer course covers properly.

Deliverable: memo.md, the app URL, and the DuckDB file behind it. Expect to be asked: what would change your recommendation.

How to Choose Data Analyst Portfolio Projects If You Have 30 Hours

Thirty spare hours a month is roughly what a working professional has. That buys two projects done properly, and my recommendation is specific: build project 1 and project 3. One shows you can model and present, the other that you find problems nobody pointed you at. If you work in operations, finance or MIS, swap project 1 for project 5.

Data analyst projects for beginners: what to fix first

Most data analyst projects for beginners fail on presentation, not analysis. Fix these four before you add a fifth repo.

Symptom in your repo What a reviewer concludes The fix
README is the default "# Project1" Nothing was finished Four lines: question, data, method, conclusion
80 cells, no headings You cannot structure work Split into load, clean, analyse with markdown headers
No numbers in the write up You never reached an answer State one quantified finding with its date range
Everything in one commit Possibly not your work Commit as you build, with real messages

How These Projects Map to the PL-300 Exam

These builds double as revision for the Microsoft Power BI Data Analyst exam. The Microsoft Learn study guide for PL-300 lists four skill areas, and the version effective 20 April 2026 renames the fourth to "Manage and secure Power BI" at 15 to 20%, with the other three at 25 to 30% each.

PL-300 skill area Weighting Project that exercises it
Prepare the data 25 to 30% Projects 3 and 4
Model the data 25 to 30% Project 1
Visualize and analyze the data 25 to 30% Projects 1 and 6
Manage and secure Power BI 15 to 20% Not covered; study separately

That last row is the honest gap. Workspace roles, row level security and deployment pipelines are hard to practise alone on a free tenant, which is where structured certification training earns its fee. Our certification versus projects comparison weighs the exam against more build time. If your builds pull you toward pipelines, a live AWS architecture and DevOps program beats a seventh dashboard.

Frequently asked questions

How many data analyst portfolio projects do I actually need?

Two or three finished ones. Breadth works against you when a reviewer spends minutes on a profile. Two projects with real READMEs and a quantified finding each beat six repositories that stop at a chart.

What are good data analyst project ideas for beginners with no experience?

Start with a star schema dashboard on a multi file dataset such as the Olist set, then add a data quality audit with failing assertions. Both fit inside 25 hours combined and need only free Power BI Desktop and DuckDB.

Do I need Power BI Pro to build a portfolio project?

No. Power BI Desktop is free and produces the .pbix file and screenshots a reviewer needs. Microsoft's pricing page lists Power BI Pro at $14 per user per month paid yearly, needed only to share reports in a workspace.

Where can I find free datasets that are not overused?

Prefer feeds that update over static Kaggle favourites. The NYC Taxi and Limousine Commission publishes monthly Parquet trip files with roughly a two month lag, and data.gov.in carries ministry level resources with real provenance.

How do I put a portfolio project on my resume?

One line per project, written as a result rather than a task list: the question, the tool, the quantified finding, then the repository link. Never file it under work experience or attach a company name you did not work for.

How long should I spend on one project before publishing it?

Cap it around 15 hours and publish whatever state it is in, with a short known limitations section. An unfinished project with an honest limitations list is credible. One polished for three months and never shipped is worth nothing.

In your position with a month of evenings, I would build the star schema dashboard, write the quality audit, and spend the last weekend on the two READMEs rather than starting a third repo. The modelling gets you shortlisted; the audit is what you talk about in the room. To have someone check the model before you publish, the live Data Analyst course runs these builds in class on weekends, and a free webinar tests the teaching first.

About this guide. 360 Digital Transformation is an Anthropic Partner and a Microsoft Authorized Training Partner. Other certification bodies, vendors and employers named here are not affiliated with us. Tools and versions change quickly; commands and figures cited were checked on 27 October 2026.

Learn it live with 360 Digital Transformation

Turn this guide into a skill employers can see

Live weekend cohortEMI available

Data Analyst Course: Excel, SQL, Python & Power BI (PL-300)

Rs. 24,999

Tools and platforms you work with

  • Microsoft Excel
  • PostgreSQL
  • MySQL
  • Python
  • pandas
  • NumPy
  • matplotlib and seaborn
  • Jupyter
Add bonus modules
See the syllabus and batch dates

Other live courses on this career path