← All insights

An De Lafonteyne

An De Lafonteyne

FABRIC
TEHNILINE

Connecting the Dots: Neo4j Graph Intelligence Inside Microsoft Fabric

How to explore connected data — fraud detection, Customer 360, recommendations — without ever leaving the Fabric environment.

Neo4j Graph Intelligence in Microsoft Fabric

Introduction: From Data to Connections

Microsoft Fabric unifies data engineering, analytics, and AI across the Microsoft ecosystem. But many business problems — fraud detection, Customer 360, supply-chain optimization — depend not on single data points, but on how those points connect.

Some of the toughest problems are about the relationships that hide across systems, transactions, or interactions. That’s where a graph approach adds real power.

  • Uncovering fraud: Fraudsters exploit networks of accounts, devices, and transactions. By following the links, a graph reveals hidden loops or onusual clusters of activity that would be nearly impossible to spot in flat reports.
  • Building a true Customer 360: Every customer leaves behind a trail of signals across systems. Graphs stitch these fragments into a single, connected view of the customer.
  • Delivering smarter recommendations: Whether a movie, product, or service — recommendations work best when they reflect real connections between people and their tastes.
  • Enhancing GenAI with context: A knowledge graph provides grounding for LLMs, ensuring answers are not just fluent but accurate, explainable, and connected to enterprise truth.

With the new Neo4j Graph Workload for Microsoft Fabric, organizations can now explore complex relationships and patterns without ever leaving the Fabric environment.

What the Neo4j Graph Workload Brings to Fabric

The Neo4j Graph Workload runs natively in Fabric as a managed workload, powered by Neo4j AuraDB. It lets you:

  • Direct connection to Fabric Lakehouse data in OneLake, minimizing data movement
  • AI-assisted graph modeling — automatically suggests nodes, relationships, and properties
  • Interactive graph exploration — expand nodes and visually inspect relationships
  • Cypher query execution within Fabric’s query interface
  • Access to 65+ Neo4j graph algorithms including PageRank, Louvain, and node similarity
  • Connect to the AuraDB for further transformation via notebooks
  • Visualize results in Power BI through BI Connector for AuraDB (Simba Technologies)
  • Microsoft Entra ID–based access control and integration with Fabric governance

It’s Fabric, but with relationship intelligence built in.

Current Limitations (Public Preview)

  • One trial per tenant: Only the first user can start the 14-day free AuraDB trial. Up to 10 users can connect concurrently once it’s created.
  • Model customization: The GenAI-assisted graph modeling is automatic, but you cannot fully edit the graph schema before loading (though you can already change a lot).
  • Writeback to OneLake: Insights currently stay inside the AuraDB instance; writing them back directly is planned for a future release.
  • No native Power BI connection: No “Open in Power BI” button or Fabric credential flow — it still uses Aura-level credentials.

Despite these limitations, the integration is already functional and powerful enough for prototyping, proof-of-concepts, and early production scenarios.

What’s on the Roadmap

  • Editable graph model designer — fully modify node and relationship mappings before data load
  • Schema refresh and synchronization for keeping the Explorer view up to date
  • Write-back to OneLake — seamless round-tripping of graph results to the Lakehouse
  • Enhanced Power BI integration — removing the need for the separate BI connector
  • Extended AI features — more advanced GraphRAG and embeddings scenarios

Pricing Model

The public preview includes a 14-day free trial of AuraDB Professional and a pay-as-you-go pricing model for AuraDB. The full cost model for the Graph Workload in Fabric — combining AuraDB subscription + Fabric capacity usage — is still being finalized by Microsoft and Neo4j.

Behind the Scenes: Building a Connected Movie Universe in Fabric

To make the Neo4j Graph Workload tangible, we explored it with a movie dataset stored in OneLake — tables for Movies, Persons (actors, directors), Users, and Roles (links between people and movies).

Traditional table queries answer facts easily: “Which movies did Tom Hanks play in?” But the moment you ask “Who tends to act together?” or “Which movies should we recommend?” — relational joins become complex, inefficient, and hard to reason about. This is exactly where the graph approach shines.

Step 1: Start in Fabric

In your Fabric workspace, click New → Neo4j Graph Workload. Choose a name, confirm the region (must match your Fabric capacity region), and Fabric will connect to Neo4j AuraDB and create a 14-day free trial tied to your tenant — setup takes less than a minute.

💡 Tip: If deploying Neo4j in a new Fabric tenant, make sure an Azure SQL Server principal exists first — otherwise setup may fail with an “unauthorized” error. Also: copy the password you receive when creating the Neo4j instance, as you’ll need it for notebook and Power BI connections.

Adding the Neo4j Graph Workload in Fabric
Neo4j AuraDB instance in Fabric

Step 2: Load Movie Data to Lakehouse

We created dummy movie data in CSVs (downloadable at GitHub) and loaded them into Delta tables in a Lakehouse.

Movie data in Lakehouse

Step 3: Turn It into a Graph

Create a new Neo4j Graph Dataset item, select your Lakehouse and all its tables. The GenAI-assisted modeling automatically transforms tabular data into a graph structure.

Selecting tables for graph modeling
Auto-generated graph model

At this stage the graph model is generated but data hasn’t loaded yet — you can still refine the model. You can also extend it by adding new nodes (e.g. Country) and relationships (FILMED-IN, LIVED-IN) before loading.

Extended graph model with Country node

To load data into the graph DB, click Transform to Graph.

Transform to Graph button

Analyze and Enrich the Graph

Exploring Your Graph Visually

The Explore tool (powered by Neo4j Bloom) lets you interact with your graph visually inside Fabric — search for patterns, expand relationships, and filter nodes to uncover hidden connections — no queries needed.

Neo4j Graph Explorer in Fabric

Querying Your Graph with Cypher

From the Query button, write and run Cypher queries directly against your graph. Results that include graph structures display as an interactive network; scalar values show as a table.

Example 1: Aggregated Query (Table View)

Count how many movies each actor appeared in:

MATCH (p:Person)-[:ACTS_IN]->(m:Movie)
RETURN p.name AS actor, count(m) AS movies
ORDER BY movies DESC
LIMIT 50;

Example 2: Relationship Query (Graph View)

Find actors who co-starred with Sam Monroe and visualize the collaboration network:

MATCH (a:Person {name: "Sam Monroe"})-[r1:ACTS_IN]->(m:Movie)<-[r2:ACTS_IN]-(co:Person)
RETURN a, r1, m, r2, co
LIMIT 50;

Graph view of actor co-starring network

Using Graph Data Science (GDS)

With movie data in Neo4j, GDS lets you go beyond exploration to measure influence, find communities, and surface similarity. Examples:

  • Communities (Louvain/LPA): discover actor ensembles that frequently co-star
  • Influence (PageRank/Betweenness): find bridge actors who connect clusters
  • Similarity (Node Similarity/Jaccard): suggest new collaborations
  • Paths (k-hop queries): trace collaboration chains between actors

Materialize a Co-Acting Network

MATCH (m:Movie)<-[:ACTS_IN]-(p1:Person),
      (m)<-[:ACTS_IN]-(p2:Person)
WHERE ElementId(p1) < ElementId(p2)
WITH p1, p2, collect(m) AS movies, count(*) AS weight,
     min(m.year) AS firstYear, max(m.year) AS lastYear
MERGE (p1)-[r:CO_ACTED_WITH]->(p2)
SET r.weight = weight,
    r.titles = [m IN movies | m.title],
    r.firstYear = firstYear,
    r.lastYear = lastYear;

Project the Graph and Run Louvain Community Detection

CALL gds.graph.drop('coacting', false);

CALL gds.graph.project(
  'coacting', 'Person',
  { CO_ACTED_WITH: { orientation: 'UNDIRECTED', properties: 'weight' } }
);

CALL gds.louvain.write('coacting', {
  relationshipWeightProperty: 'weight',
  writeProperty: 'communityId'
})
YIELD communityCount, modularity;

Now every (:Person) has a communityId — use it to color nodes in Explorer or filter in Cypher/Power BI.

Community detection visualization in Neo4j Explorer

Operationalize It: Friend-Based Movie Recommendations

After running graph algorithms, the natural next step is operationalizing insights. Using the social graph (User)-[:FOLLOWS]->(User)-[:RATES]->(Movie), you can compute which movies a user’s trusted friends rate highly — then write results back to Fabric Lakehouse for broader consumption.

The Fabric notebook below computes Top 5 friend-based movie recommendations per user and writes them to a Delta table:

%pip install --quiet neo4j~=5.28.0 pandas~=2.2.2

from neo4j import GraphDatabase
import pandas as pd

AURA_URI      = "neo4j+s://<YOURINSTANCE>.databases.neo4j.io"
AURA_USER     = "neo4j"
AURA_PASSWORD = "<YOURPASSWORD>"

cypher = """
MATCH (u:User)
CALL (u) {
  WITH u
  MATCH (u)-[:FOLLOWS]->(f:User)-[r:RATES]->(m:Movie)
  WHERE NOT (u)-[:RATES]->(m)
  WITH m, avg(coalesce(r.rating, 0.0)) AS score, count(*) AS votes
  ORDER BY score DESC, votes DESC
  LIMIT $top
  RETURN m.title AS movie, score, votes
}
RETURN u.name AS user, movie, score, votes
ORDER BY user ASC, score DESC
"""

with GraphDatabase.driver(AURA_URI, auth=(AURA_USER, AURA_PASSWORD)) as driver:
    with driver.session() as session:
        recs = pd.DataFrame(session.run(cypher, {"top": 5}).data())

# Write to Delta table in Lakehouse
sdf = spark.createDataFrame(recs)
sdf.write.format("delta").mode("overwrite").save("Tables/neo4j_movies_recs_friends")

Visualizing Graph Insights in Power BI

Power BI can connect straight to Neo4j AuraDB using the Neo4j BI Connector (ODBC/JDBC). This translates Cypher query results into a virtual SQL layer — allowing Power BI to query graph data as if it were relational.

Authentication uses the default user neo4j and the password copied when the graph DB was created.

Power BI connected to Neo4j AuraDB

This setup bypasses the Fabric Graph Workload UI for now, connecting directly to the AuraDB instance. It’s stable, production-ready, and ideal for interactive Power BI dashboards on graph data.

An De Lafonteyne

An De Lafonteyne

LinkedIn →

Interested in graph analytics on Fabric?

Let’s explore what Neo4j could unlock for your data.

Get in touch →