- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Looking for governance across semantic models and reports? Need a programmatic solution to deploy Direct Lake (and other) semantic models and reports across workspaces and Lakehouses? Semantic Link Labs is the answer. Thanks to Michael Kovalsky and Markus Cozowicz for their efforts in creating this incredible library! In this article, we will review the Power BI architecture and output of a Fabric notebook that leverages Semantic Link Labs to programmatically deploy semantic models and reports across workspaces and schema-enabled Lakehouses, providing central governance.
- Link to notebook on GitHub: Direct Lake - Semantic Model and Report Deployment - Parameter.ipynb
Steps:
- Deploy semantic model to new workspace and rename
- Update semantic model connection to new Lakehouse
- (Optional) Check semantic model Lakehouse connection
- Update Direct Lake table partition to new schema
- (Optional) Get Tabular Model Scripting Language (TMSL) to confirm lineage
- Clone report to new workspace and rebind to new semantic model
- (Optional) Launch report to preview
Architecture
Partitioning a semantic model and reports into smaller source tables, for example by store (Europe, Asia, North America) has many benefits including:
- Performance optimization: Reduced row counts improve query performance.
- Decreased concurrent queries: Subsets of users generate fewer concurrent queries.
- Simplified security management: Option to eliminate or simplify Row-Level Security (RLS) requirements.
In the example below, we have an architecture in which each store has its own schema with shared dimensions (shortcuts within Gold Lakehouse). As best practice semantic models and reports are in separate workspaces and reports are distributed via apps:
- One Data Engineering – Gold workspace with Lakehouse
- Three Data Hub workspaces with Lakehouses and Direct Lake Semantic Models
- Three Reporting Hub workspaces with Reports and Apps
Within the Data Engineering – Gold workspace we have a schema-enabled Lakehouse with schemas for each store:
The Fact tables in each schema are directly populated via ETL processes (in this case a simple change in where clause) while dimensions are shared across schemas via shortcuts from the “master” dbo schema.
Each Data Hub workspace has their own Reporting Lakehouse with schema shortcuts to their respective schema in the Data Engineering – Gold workspace. Example for Europe shown below:
Now, the goal is to develop three Direct Lake semantic models and reports that point to unique workspaces, Lakehouses and schemas. Instead of having to do this manually each time a change is made to the semantic model or report (which makes for a governance nightmare and leaves a lot of room for error), we will leverage Semantic Link Labs in Fabric notebooks to automate the deployment.
Let’s treat the Europe store as the starting point and source of truth for our development. We have a working semantic model and report for Europe and would like to deploy to Asia and North America.
Programmatic Deployment using Semantic Link Labs
The notebook below will programmatically deploy the Europe semantic model and report to Asia and North America across workspaces with different Lakehouses and lineage.
- Link to notebook on GitHub: Direct Lake - Semantic Model and Report Deployment - Parameter.ipynb
Reviewing the results after running the notebook
As seen below, we now have two new semantic models and reports for Asia and North America with updated workspaces and Lakehouses:
Viewing the reports, everything works as expected:
Note, a few manual steps remain
- After initial model deployment: need to update security role members, cloud connection from SSO (default) to fixed identity, access permissions.
- Once deployed and model is overwritten only cloud connection needs to be updated.
However, the above items should be able to be done programmatically via Semantic Link Labs and this is next on my to-do list 🙂
1. Adding security role members on the new semantic models:
2. Updating Cloud connection settings to fixed identity (for RLS purposes):
3. Updating permissions:
4. Updating app:
Reporting Hub – Asia App from TestUser1 perspective with dynamic Product RLS implemented:
Final Thoughts
Coming from a Power BI development background, I’m by no means a Python expert but Semantic Link makes data science and automation accessible to everyone! The extent of capabilities within Semantic Link Labs is truly impressive. Tasks that would have taken hours if not days including testing were done within minutes using minimal scalable code. Give it a try and let me know your thoughts!
References
- Semantic Link Labs library: https://github.com/microsoft/semantic-link-labs
- Wiki: https://github.com/microsoft/semantic-link-labs/wiki
- sempy_labs package: https://semantic-link-labs.readthedocs.io/en/latest/sempy_labs.html
- Code Examples: https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples
- Helper Notebooks: https://github.com/microsoft/semantic-link-labs/tree/main/notebooks
- Semantic Link: https://learn.microsoft.com/en-us/fabric/data-science/semantic-link-overview
- Sempy Package: https://learn.microsoft.com/en-us/python/api/semantic-link-sempy/sempy?view=semantic-link-python
- Fabric Functions Code Examples: https://github.com/m-kovalsky/Fabric
- Examples of Semantic Link use cases and many other excellent Fabric articles by Sandeep Pawar:
- Workspace architecture: Thoughts on workspace design in Microsoft Fabric — part 1 | by Nicholas Hurt | Medium
- RLS on Direct Lake models: Setting up RLS on a Direct Lake semantic model
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
- How to Use the Numeric Range Parameter in Power BI
- Power BI Report subscriptions does not respect RLS
- Programmatically deploy Semantic Models and Report...
- Retaining Slicer Selection Between Bookmarks Using...
- TOP DAX function for everyday use - Filter Functio...
- 🏆 Power BI DataViz World Championships | Week 4 F...
- 🏆 Power BI DataViz World Championships | Week 4 W...
- AI-Driven Approvals: Smarter SOX Compliance Withou...
- How to Calculate Cumulative Sum in Power BI
- 🏆 Power BI DataViz World Championships | Week 3 F...
-
BunzietheBoo
on: 🏆 Power BI DataViz World Championships | Week 4 F...
-
thefarside
on: 🏆 Power BI DataViz World Championships | Week 4 W...
- Magudeswaran_MR on: How to Calculate Cumulative Sum in Power BI
-
Dera__Igboejesi
on: 🏆 Power BI DataViz World Championships | Week 3 F...
- M_S_MANOHAR on: Dynamic Subscriptions
-
LucasKoch2900
on: 🏆 Power BI DataViz World Championships | Week 3 W...
-
slindsay on: 🏆 Power BI DataViz World Championships | Week 4 |...
-
JamesDBartlett3
on: PBIP fx hack: dynamic expressions for properties -...
- TBH on: How to add Gradient Text in Power BI dashboard
-
Jasmine_319
on: 🏆 Power BI DataViz World Championships | Week 2 F...
-
How To
662 -
Tips & Tricks
630 -
Events
130 -
Support insights
121 -
Opinion
81 -
DAX
66 -
Power BI
65 -
Power Query
62 -
Power BI Dev Camp
45 -
Power BI Desktop
40 -
Roundup
38 -
Power BI Embedded
20 -
Time Intelligence
19 -
Tips&Tricks
18 -
Featured User Group Leader
16 -
PowerBI REST API
12 -
Dataflow
10 -
Power Query Tips & Tricks
8 -
finance
8 -
Data Protection
8 -
Power BI Service
8 -
Direct Query
7 -
Power BI REST API
6 -
Auto ML
6 -
financial reporting
6 -
Data Analysis
6 -
Power Automate
6 -
Data Visualization
6 -
Python
6 -
Machine Learning
5 -
Income Statement
5 -
Dax studio
5 -
powerbi
5 -
service
5 -
Power BI PowerShell
5 -
Line chart
4 -
Group By
4 -
community
4 -
RLS
4 -
M language
4 -
Paginated Reports
4 -
External tool
4 -
Power BI Goals
4 -
PowerShell
4 -
Desktop
4 -
Bookmarks
4 -
Data Science
3 -
Azure
3 -
Data model
3 -
Conditional Formatting
3 -
Visualisation
3 -
Life Sciences
3 -
Administration
3 -
M code
3 -
Visuals
3 -
SQL Server 2017 Express Edition
3 -
R script
3 -
Aggregation
3 -
calendar
3 -
Gateways
3 -
R
3 -
M Query
3 -
Webinar
3 -
CALCULATE
3 -
R visual
3 -
Reports
3 -
PowerApps
3 -
rank
2 -
ladataweb
2 -
Troubleshooting
2 -
Date DIFF
2 -
Transform data
2 -
Healthcare
2 -
Tips and Tricks
2 -
Incremental Refresh
2 -
Number Ranges
2 -
Query Plans
2 -
Power BI & Power Apps
2 -
Random numbers
2 -
Day of the Week
2 -
Custom Visual
2 -
VLOOKUP
2 -
pivot
2 -
calculated column
2 -
M
2 -
hierarchies
2 -
Power BI Anniversary
2 -
Language M
2 -
inexact
2 -
Date Comparison
2 -
Power BI Premium Per user
2 -
Forecasting
2 -
REST API
2 -
Editor
2 -
Split
2 -
measure
2 -
Microsoft-flow
2 -
Paginated Report Builder
2 -
Working with Non Standatd Periods
2 -
powerbi.tips
2 -
Custom function
2 -
Reverse
2 -
PUG
2 -
Custom Measures
2 -
Filtering
2 -
Row and column conversion
2 -
Python script
2 -
Nulls
2 -
DVW Analytics
2 -
parameter
2 -
Industrial App Store
2 -
Week
2 -
Date duration
2 -
Formatting
2 -
Weekday Calendar
2 -
Support insights.
2 -
construct list
2 -
slicers
2 -
SAP
2 -
Power Platform
2 -
Workday
2 -
external tools
2 -
index
2 -
RANKX
2 -
PBI Desktop
2 -
Date Dimension
2 -
Integer
2 -
Visualization
2 -
Power BI Challenge
2 -
Query Parameter
2 -
Date
2 -
SharePoint
2 -
Power BI Installation and Updates
2 -
How Things Work
2 -
Tabular Editor
2 -
Excel
1 -
Cumulative Totals
1 -
Report Theme
1 -
Bookmarking
1 -
oracle
1 -
mahak
1 -
pandas
1 -
Networkdays
1 -
Button
1 -
Dataset list
1 -
Keyboard Shortcuts
1 -
Fill Function
1 -
LOOKUPVALUE()
1 -
Tips &Tricks
1 -
Plotly package
1 -
Sameperiodlastyear
1 -
Office Theme
1 -
matrix
1 -
bar chart
1 -
Measures
1 -
powerbi argentina
1 -
Canvas Apps
1 -
total
1 -
Filter context
1 -
Difference between two dates
1 -
get data
1 -
OSI
1 -
Query format convert
1 -
ETL
1 -
Json files
1 -
Merge Rows
1 -
CONCATENATEX()
1 -
take over Datasets;
1 -
Networkdays.Intl
1 -
refresh M language Python script Support Insights
1 -
Governance
1 -
Fun
1 -
Power BI gateway
1 -
gateway
1 -
Elementary
1 -
Custom filters
1 -
Vertipaq Analyzer
1 -
powerbi cordoba
1 -
Model Driven Apps
1 -
REMOVEFILTERS
1 -
XMLA endpoint
1 -
translations
1 -
OSI pi
1 -
Parquet
1 -
Change rows to columns
1 -
remove spaces
1 -
Get row and column totals
1 -
Retail
1 -
Power BI Report Server
1 -
School
1 -
Cost-Benefit Analysis
1 -
DIisconnected Tables
1 -
Sandbox
1 -
Honeywell
1 -
Combine queries
1 -
X axis at different granularity
1 -
ADLS
1 -
Primary Key
1 -
Microsoft 365 usage analytics data
1 -
Randomly filter
1 -
Week of the Day
1 -
Azure AAD
1 -
query
1 -
Dynamic Visuals
1 -
KPI
1 -
Intro
1 -
Icons
1 -
ISV
1 -
Ties
1 -
unpivot
1 -
Practice Model
1 -
Continuous streak
1 -
ProcessVue
1 -
Create function
1 -
Table.Schema
1 -
Acknowledging
1 -
Postman
1 -
Text.ContainsAny
1 -
Power BI Show
1 -
Get latest sign-in data for each user
1 -
API
1 -
Kingsley
1 -
Merge
1 -
variable
1 -
Issues
1 -
function
1 -
stacked column chart
1 -
ho
1 -
ABB
1 -
KNN algorithm
1 -
List.Zip
1 -
optimization
1 -
Artificial Intelligence
1 -
Map Visual
1 -
Text.ContainsAll
1 -
Tuesday
1 -
help
1 -
group
1 -
Scorecard
1 -
Json
1 -
Tops
1 -
financial reporting hierarchies RLS
1 -
Featured Data Stories
1 -
MQTT
1 -
Custom Periods
1 -
Partial group
1 -
Reduce Size
1 -
FBL3N
1 -
Wednesday
1 -
Power Pivot
1 -
Quick Tips
1 -
data
1 -
PBIRS
1 -
Usage Metrics in Power BI
1 -
Multivalued column
1 -
Pipeline
1 -
Path
1 -
Yokogawa
1 -
Dynamic calculation
1 -
Data Wrangling
1 -
native folded query
1 -
transform table
1 -
UX
1 -
Cell content
1 -
General Ledger
1 -
Thursday
1 -
Table
1 -
Natural Query Language
1 -
Infographic
1 -
automation
1 -
Prediction
1 -
newworkspacepowerbi
1 -
Performance KPIs
1 -
HR Analytics
1 -
keepfilters
1 -
Connect Data
1 -
Financial Year
1 -
Schneider
1 -
dynamically delete records
1 -
Copy Measures
1 -
Friday
1 -
Q&A
1 -
Event
1 -
Custom Visuals
1 -
Free vs Pro
1 -
Format
1 -
Active Employee
1 -
Custom Date Range on Date Slicer
1 -
refresh error
1 -
PAS
1 -
certain duration
1 -
DA-100
1 -
bulk renaming of columns
1 -
Single Date Picker
1 -
Monday
1 -
PCS
1 -
Saturday
1 -
update
1 -
Slicer
1 -
Visual
1 -
forecast
1 -
Regression
1 -
CICD
1 -
Current Employees
1 -
date hierarchy
1 -
relationship
1 -
SIEMENS
1 -
Multiple Currency
1 -
Power BI Premium
1 -
On-premises data gateway
1 -
Binary
1 -
Power BI Connector for SAP
1 -
Sunday
1 -
Training
1 -
Announcement
1 -
Features
1 -
domain
1 -
pbiviz
1 -
sport statistics
1 -
Intelligent Plant
1 -
Circular dependency
1 -
GE
1 -
Exchange rate
1 -
Dendrogram
1 -
range of values
1 -
activity log
1 -
Decimal
1 -
Charticulator Challenge
1 -
Field parameters
1 -
deployment
1 -
ssrs traffic light indicators
1 -
SQL
1 -
trick
1 -
Scripts
1 -
Color Map
1 -
Industrial
1 -
Weekday
1 -
Working Date
1 -
Space Issue
1 -
Emerson
1 -
Date Table
1 -
Cluster Analysis
1 -
Stacked Area Chart
1 -
union tables
1 -
Number
1 -
Start of Week
1 -
Tips& Tricks
1 -
Workspace
1 -
Theme Colours
1 -
Text
1 -
Flow
1 -
Publish to Web
1 -
Extract
1 -
Topper Color On Map
1 -
Historians
1 -
context transition
1 -
Custom textbox
1 -
OPC
1 -
Zabbix
1 -
Label: DAX
1 -
Business Analysis
1 -
Supporting Insight
1 -
rank value
1 -
Synapse
1 -
End of Week
1 -
Tips&Trick
1 -
Showcase
1 -
custom connector
1 -
Waterfall Chart
1 -
Power BI On-Premise Data Gateway
1 -
patch
1 -
Top Category Color
1 -
A&E data
1 -
Previous Order
1 -
Substring
1 -
Wonderware
1 -
Power M
1 -
Format DAX
1 -
Custom functions
1 -
accumulative
1 -
DAX&Power Query
1 -
Premium Per User
1 -
GENERATESERIES
1 -
Report Server
1 -
Audit Logs
1 -
analytics pane
1 -
step by step
1 -
Top Brand Color on Map
1 -
Tutorial
1 -
Previous Date
1 -
XMLA End point
1 -
color reference
1 -
Date Time
1 -
Marker
1 -
Lineage
1 -
CSV file
1 -
conditional accumulative
1 -
Matrix Subtotal
1 -
Check
1 -
null value
1
- 03-30-2025 - 04-01-2025
- 03-23-2025 - 03-29-2025
- 03-16-2025 - 03-22-2025
- 03-09-2025 - 03-15-2025
- 03-02-2025 - 03-08-2025
- 02-23-2025 - 03-01-2025
- 02-16-2025 - 02-22-2025
- 02-09-2025 - 02-15-2025
- 02-02-2025 - 02-08-2025
- 01-26-2025 - 02-01-2025
- 01-19-2025 - 01-25-2025
- 01-12-2025 - 01-18-2025
- 01-05-2025 - 01-11-2025
- View Complete Archives