Excelgoodies logo +31 97 010285556

LEARN THIS HANDS ON

Full Stack BI (On-Cloud)

. Live Online FILLING FAST
View all upcoming batches
From Power BI Developer to Azure Data Engineer: Mapping the Real Skills Gap

From Power BI Developer to Azure Data Engineer: Mapping the Real Skills Gap

A lot of BI developers in Utrecht and elsewhere hit the same wall: they can bend DAX to their will, shape data with Power Query, and ship polished reports—but freeze when someone mentions "Delta Lake" or "PySpark pipelines". If you’re wondering how to turn your Power BI developer experience into a credible Azure data engineer career path without starting from zero, this article gives you a concrete map.

We’ll follow one realistic scenario: a BI analyst who has built a successful semantic model on top of a messy source system, and whose team now wants a proper lakehouse and reusable data pipelines. We’ll walk the path from SQL and Power Query to Azure Data Factory, Spark, and lakehouses, showing what actually changes and what carries over.


Scenario: The Utrecht BI Analyst Who Outgrew Power BI

You’re a BI developer in a mid-size organisation:

  • You own a set of Power BI datasets serving finance and operations.
  • You’re strong in DAX, comfortable in Power Query, and reasonably good at SQL.
  • Your main data source is a mix of on-prem SQL Server and CSV exports in SharePoint.

The pain points:

  • Refresh windows are getting longer and increasingly fragile.
  • Different reports repeat the same Power Query logic, slightly modified.
  • Data science colleagues keep asking for curated tables outside Power BI.
  • Leadership wants a “lakehouse” on Azure that feeds BI, data science, and downstream apps.

Your manager’s ask: “Can you help us design the lakehouse and pipelines? You already understand the data best.”

This is the BI developer to data engineer moment.


Skill Map: What Carries Over, What Changes

Before diving into tools, it helps to map your current skills to data engineering responsibilities.

Skills You Already Have (And Should Lean On)

From Power BI / BI development:

  • Data modeling: Star schemas, dimension vs fact, grain, slowly changing dimensions (at least conceptually).
  • Query logic: Joins, filters, aggregations in SQL and Power Query.
  • Performance thinking: Understanding how filter context and cardinality affect DAX performance.
  • Business context: Knowing which fields matter to finance, which keys are stable, which tables are dirty.

These are directly valuable in data engineering design decisions.

Skills You Need to Add

For an Azure data engineer role, the big gaps usually are:

  1. Data platform architecture: How Azure services fit together.
  2. Orchestration and pipelines: Moving from report refresh to reusable, observable ETL/ELT.
  3. Distributed processing: Spark (PySpark or Scala) on large datasets.
  4. Storage formats and lakehouses: Parquet, Delta Lake, medallion patterns.
  5. DevOps practices: Version control, environments, deployment.

You don’t need to become a full-time software engineer, but you do need enough depth to design and maintain production-grade data flows.


Step 1: Reframe Your Power BI Model as a Lakehouse Design

Start from something you already know: your existing Power BI dataset.

From Semantic Model to Medallion Architecture

Take your main dataset and classify tables:

  • Bronze (raw): Source system tables or files as-is.
  • Silver (clean): Deduplicated, typed, conformed tables.
  • Gold (business): Aggregated, business-ready facts and dimensions.

In Power BI, you probably do Bronze→Gold transformations in Power Query and sometimes in DAX. In a lakehouse, the goal is:

  • Bronze and Silver live in Azure Data Lake Storage Gen2 (ADLS) as files (often Parquet or Delta).
  • Gold can live both in ADLS and as a warehouse or semantic model (e.g., Fabric warehouse, Power BI dataset).

Practical Exercise

Pick one existing Power BI model and:

  1. List its source tables.
  2. For each transformation step in Power Query, label it as Bronze or Silver logic.
  3. For each calculated table or complex DAX that reshapes data, label it as Gold logic.

This gives you a first-pass design of your lakehouse layers without touching any new tools.


Step 2: From Power Query to Pipelines (Azure Data Factory / Fabric Data Factory)

Power Query refresh is essentially a pipeline hidden inside Power BI. As volumes grow, you need explicit orchestration.

On Azure today, two common options are:

  • Azure Data Factory (ADF): Standalone service for pipelines and data flows.
  • Data Factory in Microsoft Fabric: Similar concepts, integrated with the Fabric workspace and lakehouse.

What Changes Compared to Power BI Refresh

Power BI refresh:

  • Tied to a single dataset.
  • Limited orchestration and dependency control.
  • Monitoring mostly via refresh history.

ADF / Fabric Data Factory:

  • Pipelines can serve multiple downstream consumers (BI, ML, APIs).
  • Rich scheduling, dependency management, and failure handling.
  • Centralised monitoring and logging for many types of data movement.

Translating a Power Query Process into a Pipeline

Take a typical Power Query flow:

  1. Import CSV from SharePoint.
  2. Clean types, remove duplicates.
  3. Join to a dimension from SQL Server.
  4. Load into a Power BI table.

In ADF or Fabric Data Factory, the analogous pipeline might:

  1. Copy CSV from SharePoint to ADLS Bronze.
  2. Data flow / Spark job to clean types and deduplicate into Silver (Parquet/Delta).
  3. Data flow / Spark job to join to a SQL-based dimension, write Gold fact.
  4. Trigger a dataset refresh or load into a warehouse.

You’re not losing Power Query skills here—you’re just moving the logic into a more scalable, observable environment.


Step 3: Enter Spark and PySpark Without Drowning

The most intimidating piece for many BI developers is Spark. The good news: your SQL and Power Query experience translates better than you expect.

On Azure, you’ll typically encounter Spark in:

  • Azure Databricks (managed Spark platform).
  • Microsoft Fabric lakehouses (Spark notebooks in the same workspace).

Mental Model: Spark vs Power Query

Spark:

  • Operates on distributed datasets (DataFrames) across a cluster.
  • Transformations are lazy; actions trigger execution.
  • Optimised for large-scale processing; supports Parquet, Delta Lake, and more.

Power Query:

  • Operates on in-memory tables inside Power BI Desktop or the service.
  • Also has a functional, step-based transformation model.

The core operations—select, filter, join, group—are the same.

A Concrete PySpark Example

Suppose you have a CSV of sales in ADLS and a dimension of products in a SQL database. You want a clean Gold fact table in a lakehouse.

A basic PySpark notebook in Fabric or Databricks might look like this:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_date

spark = SparkSession.builder.getOrCreate()

# Bronze: read raw sales from ADLS CSV
sales_bronze = spark.read.option("header", "true").csv("abfss://data@storageaccount.dfs.core.windows.net/bronze/sales/")

# Silver: clean types and remove duplicates
sales_silver = (
    sales_bronze
    .withColumn("SaleDate", to_date(col("SaleDate"), "yyyy-MM-dd"))
    .withColumn("Quantity", col("Quantity").cast("int"))
    .withColumn("Amount", col("Amount").cast("decimal(18,2)"))
    .dropDuplicates(["SaleId"])
)

# Read product dimension from a SQL database via JDBC
products_dim = spark.read.format("jdbc").options(
    url="jdbc:sqlserver://myserver.database.windows.net:1433;database=mydb",
    dbtable="dbo.Products",
    user="sql_user",
    password="sql_password",
    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
).load()

# Gold: join sales to products
sales_gold = (
    sales_silver.alias("s")
    .join(products_dim.alias("p"), col("s.ProductId") == col("p.ProductId"), "left")
)

# Write out as Delta Lake for lakehouse consumption
sales_gold.write.format("delta").mode("overwrite").save("abfss://data@storageaccount.dfs.core.windows.net/gold/sales/")

This does exactly what the surrounding text describes:

  • Reads raw CSV (Bronze).
  • Cleans and deduplicates (Silver).
  • Joins to a dimension from SQL Server.
  • Writes a Gold fact as Delta Lake.

If you can read Power Query’s step list, you can reason about this PySpark pipeline.


Step 4: Lakehouse Fundamentals BI Developers Must Actually Know

“Lakehouse” is a broad term, but there are a few concepts that matter immediately when you move from Power BI to data engineering.

Storage Format: Don’t Stop at CSV

For production lakehouses on Azure, you’ll usually prefer:

  • Parquet for columnar, compressed storage.
  • Delta Lake for Parquet plus transaction log (ACID, schema evolution, time travel).

As a BI developer, the key implications:

  • Reading Parquet/Delta from Spark or Fabric is usually more efficient than CSV.
  • Delta Lake makes incremental loads and upserts much safer than hand-rolled file logic.

Schema Management

In Power BI, schema drift often shows up as a refresh error. In a lakehouse:

  • You can use Delta Lake schema enforcement to prevent unexpected changes.
  • You can use schema evolution (when configured) to allow controlled changes.

For example, in Delta, an unexpected new column can either be rejected or handled depending on options you set when writing.

Lakehouse vs Warehouse vs Dataset

In a modern Azure/Fabric stack you might have:

  • Lakehouse: Files (Delta/Parquet) in ADLS or Fabric OneLake, queried via Spark or SQL endpoints.
  • Warehouse: Relational, often used for serving BI and downstream apps.
  • Dataset / semantic model: The Power BI layer with DAX measures and relationships.

The data engineer career path is about owning the lakehouse and warehouse layers, not just the dataset.


Step 5: Operational Skills Beyond the Desktop

As soon as you leave “Power BI Desktop + scheduled refresh”, you hit operational concerns.

Version Control and Environments

Data engineering work typically lives in:

  • Git repositories for notebooks, SQL scripts, pipeline definitions (via JSON or YAML when supported).
  • Dev / Test / Prod workspaces or resource groups.

Practical steps for a BI developer:

  • Start checking in your Power Query logic as documented SQL or transformation specs.
  • When you build your first Spark notebook, store it in Git and use branches for changes.

Monitoring and Failure Handling

Instead of “refresh failed, check gateway”, you’ll deal with:

  • Pipeline run histories and logs in ADF or Fabric.
  • Spark job monitoring (stages, tasks, executors).

Core habits:

  • Make every pipeline idempotent: safe to rerun without corrupting data.
  • Log key counts (rows read/written) and use alerts on unexpected changes.

Security and Governance

You already manage row-level security in Power BI. Data engineering adds:

  • Access control on ADLS containers, Fabric workspaces, and lakehouse tables.
  • Managed identities for services like ADF to access storage and databases.

You don’t need to be the security architect, but you must design pipelines that respect least-privilege and avoid embedding credentials in code.


Concrete Upgrade Plan for a BI Developer

To make this actionable, here’s a practical sequence that fits into normal project work.

  1. Document your existing model as Bronze/Silver/Gold.

    • Use your main Power BI dataset.
    • Capture Power Query steps and DAX that perform data shaping.
  2. Prototype a lakehouse on a non-critical subject area.

    • Set up ADLS Gen2 storage (or a Fabric lakehouse) in a dev environment.
    • Land raw data (Bronze) there via a simple pipeline.
  3. Rewrite a Power Query transformation in Spark.

    • Start with a small table.
    • Use a notebook (Fabric or Databricks) and reproduce the logic in PySpark.
  4. Expose Gold tables to Power BI from the lakehouse.

    • Connect Power BI to the lakehouse or warehouse.
    • Remove duplicated logic from Power Query where appropriate.
  5. Introduce basic DevOps practices.

    • Put notebooks and pipeline definitions under Git.
    • Create at least Dev and Prod workspaces and define a promotion path.

Each step builds data engineering skills on top of your existing BI understanding rather than replacing it.


Closing: One Practical Takeaway

The fastest way to move from Power BI developer to data engineer is not to start with generic Spark tutorials—it’s to re-implement one of your existing, successful BI models as a lakehouse with pipelines. If you can turn a single dataset’s Power Query and DAX into Bronze/Silver/Gold tables, orchestrated with ADF or Fabric and processed with PySpark, you’ve crossed the real skills gap that nobody talks about—and you’ve done it in a way your team can put into production.

Editor's Note

This article reflects the shift from report-centric BI development to lakehouse-oriented data engineering, especially in teams where Power BI practitioners are being asked to own Azure-based pipelines and shared data platforms.

Professionals who want to apply these patterns to their own data can explore Excelgoodies' Data Engineering & BI Azure (On Cloud) programme - taught live by instructors, with certification awarded once a real project is running at work.

Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.

Azure

New

Next Batches Now Live

Power BIPower BI
SQLSQL
Power AppsPower Apps
Power AutomatePower Automate
Microsoft FabricMicrosoft Fabrics
AzureAzure Data Engineering
Explore Dates & Reserve Your Spot → Reserve Your Spot →