• Link to Facebook
  • Link to Instagram
  • Link to LinkedIn
  • Link to Youtube
  • Link to X
Call Us Today! 512-640-5750
Data Architect as a Service | Remote DBA Services
  • Services
    • Analytics Architecture
    • Database Architecture
    • Software Architecture
    • Microsoft Fabric Consulting
      • Microsoft Fabric Health Check
  • About Us
    • Testimonials
    • Recommendation Program
    • Jobs
      • Data Engineering Consultant
      • Principal Data Analytics Architect
  • Resources
    • Blog
    • Videos
  • Contact
  • Click to open the search input field Click to open the search input field Search
  • Menu Menu
Meagan Longoria

Check Power BI report interactions with Semantic Link Labs

Fabric Notebooks, Microsoft Fabric, Python

It can be tedious to check what visual interactions have been configured in a Power BI report. If you have a lot of bookmarks, this becomes even more important. If you do this manually, you have to turn on Edit Interactions and select each visual to see what interactions it is emitting to the other visuals on the page.

But there is a better way!

Listing visual interactions

You can use a a bit of Python in a Fabric notebook and the Semantic Link Labs library to return the list of modified interactions in a DataFrame. I take it one step further and also check for visuals that are not the target of any modified interactions.

For this to be useful, you have to understand that the default interactions are to cross-highlight or cross-filter where available. For instance, if you have a column chart that shows average student grades by subject and a bar chart that shows average grade by student, when you select the Science subject on the column chart, it will cross-highlight the bar chart so you can see how the student’s science grade compares to their total average. If you don’t like that interaction, you can change it. You can make it filter so you only see the science grade without the total in the background. Or you can configure it so there is no interaction and the bar chart is not cross-filtered or cross-highlighted.

The report definition is in JSON, and if you change no interactions from the default, interactions will not all be specifically listed. But if we change an interaction, we would see that change in the JSON.

Code walkthrough

If you aren’t using an environment with Semantic Link Labs already installed, you must do that first as shown below..

%pip install semantic-link-labs

Here I import and alias the report module from Semantic Link Labs as well as pandas.

# Imports
import sempy_labs as labs
from sempy_labs import report

import pandas as pd

Next I need to create a report wrapper for the report in which I want to review the interactions.

var_rpt = '<insert item GUID here>'
var_ws = '<insert workspace GUID here>'
var_rptw = labs.report.ReportWrapper(
report=var_rpt, workspace=var_ws,readonly=False
)

The main function used here is the Semantic Link Labs list_visual_interactions function, which gets the list of modified interactions.

var_rptw.list_visual_interactions()

If you just use that function, you will get a DataFrame with the following columns.

a table withe the columns Page Name, Page Display Name, Source Visual Name, Target Visual Name, and Type. The values for Source Visual Name and Target Visual Name are GUIDs rather than a text name.

Pages have display names, but visuals don’t. The title we see on visuals in Power BI Desktop is just a property and is not returned by this function. So if you know your report well, you might be able to determine what things are by the GUID (or use Visual Studio Code to view the JSON and locate the visual, but we can make this better with a little more code.

The list_visuals function provides more info about each visual, so if we merge (join) the dataframes containing the list of visuals and the list of modified interactions, we get something more useful.

var_reportname = labs.resolve_report_name(
    var_rpt, workspace=var_ws
)
df_visuals = var_rptw.list_visuals()
df_visuals = df_visuals[[
    'Page Name', 'Visual Name', 'Display Type', 'X', 'Y', 'Z', 'Width',
    'Data Visual'
]]
df_interactions = var_rptw.list_visual_interactions()
df_visualinteractions1 = pd.merge(
    df_interactions, df_visuals, left_on='Source Visual Name',
    right_on='Visual Name', how='inner'
)
df_visualinteractions = pd.merge(
    df_visualinteractions1, df_visuals, left_on='Target Visual Name',
    right_on='Visual Name', how='inner'
)
df_visualinteractions = df_visualinteractions.drop(
    columns=[
        'Page Name_y', 'Visual Name_x', 'Data Visual_x', 'Page Name_x',
        'Page Name_y', 'Z_x', 'Z_y', 'Visual Name_y'
    ]
)
df_visualinteractions = df_visualinteractions.rename(
    columns={
        'Display Type_x': 'Source Display Type', 'X_x': 'Source X',
        'Y_x': 'Source Y', 'Width_x': 'Source Width',
        'Display Type_y': 'Target Display Type', 'X_y': 'Target X',
        'Y_y': 'Target Y', 'Width_y': 'Target Width',
        'Data Visual_y': 'Target Is Data Visual',
        'Type': 'Interaction Type'
    }
)
var_newcolumnorder = [
    'Page Display Name', 'Page Name', 'Interaction Type',
    'Source Visual Name', 'Source Display Type', 'Source X', 'Source Y',
    'Source Width', 'Target Visual Name', 'Target Display Type',
    'Target Is Data Visual', 'Target X', 'Target Y', 'Target Width'
]
df_visualinteractions = df_visualinteractions[var_newcolumnorder]
df_visualinteractions = df_visualinteractions.sort_values(
    by=['Page Display Name', 'Source Visual Name', 'Interaction Type']
)
display(df_visualinteractions)

I narrowed down the column list for the visuals to only the ones I felt were helpful. The list of interactions contains a source visual (the visual emitting the interaction) and a target visual (the visual receiving the interaction). I merge the visual interactions with the visuals twice, so we can get info on both the source and target visuals. After merging, I dropped some columns and renamed others, then reordered the remaining columns to make it easier to understand. And finally, I sorted the values by page, then visual, then interaction type.

This results in the following table.

A table with the following columns: Page Display Name, Page Name, Interaction Type, Source Visual Name, Source Display Type, Source X, Source Y, Source Width, Target Visual Name, Target Display Type, Target is Data Visual, Target X, Target Y, Target Width.

Now I can see what page the visuals are on, which type of interaction they have, what type of visual is used for the source and target, and where the source and target are located on the page.

I can also check which visuals have no modified interactions.

df_nochangedinteractions = df_visuals[
    ~df_visuals['Visual Name'].isin(
        df_visualinteractions['Target Visual Name']
    )
]
print(
    'The following visuals are not the target of any modified '
    'interactions:'
)
display(df_nochangedinteractions)

Here, I take the full list of visuals and return any visual that is not listed in the target visuals in the table above. This returns the following table.

A table with the following columns: Page Name, Visual Name, Display Type, X, Y, Z, Width, Data Visual

In my report, which uses the default size (1280 x 720), I have a large bar chart that is somewhat near the top of the page and about 1/3 of the way into the page. All the interactions of other visuals with this bar chart use the default interaction settings.

And if I run this last line of code, I can validate that by interacting with the report directly in my notebook.

#View the report to visually confirm the interactions
report.launch_report(report=var_reportname, workspace=var_ws)

This adds a report viewer window containing the fully interactive report in the cell results area. By interacting with the report, I can confirm that I have turned off all interactions from the bar chart to other visuals.

Screenshot of a report shown in the results of a notebook cell using the launch_report function from Semantic Link Labs.

More posts about Semantic Link Labs

So far, I’ve been exploring the report and admin subpackages of Semantic Link Labs. Below are some other blog posts I’ve written about them.

Finding fields used in a Power BI report in PBIR format with Semantic Link Labs

Get Power BI Report Viewing History using Semantic Link Labs

Modify Power BI page visibility and active status with Semantic Link Labs

Happy reading!

The post Check Power BI report interactions with Semantic Link Labs first appeared on Data Savvy.

Please enable JavaScript in your browser to complete this form.

Get our latest posts by email

Practical SQL Server, Microsoft Fabric, and Power BI insights from the ProcureSQL team. New articles delivered by email. Unsubscribe anytime.

Name *

October 31, 2025/by Meagan Longoria
Share this entry
  • Share on Facebook
  • Share on X
  • Share on X
  • Share on LinkedIn
  • Share on Reddit
  • Share by Mail
https://procuresql.com/wp-content/uploads/2025/10/Screenshot-2026-02-12-124819.avif 910 986 Meagan Longoria /wp-content/uploads/2024/05/Data-Architecture-as-a-Service-with-ProcureSQL.png Meagan Longoria2025-10-31 18:23:542026-02-12 19:29:59Check Power BI report interactions with Semantic Link Labs
Join Our Newsletter
  Thank you for Signing Up
Please correct the marked field(s) below.
1,true,6,Contact Email,21,false,1,First Name,21,false,1,Last Name,2
Search Search

Blog Categories

  • $150 Challenge
  • Advice
  • Announcements
  • Artificial Intelligence
  • Awards
  • Azure Data Factory
  • C-Level
  • Cloud
  • Community
  • Conferences
  • Data Architecture
  • Data Integration
  • Data Visualization
  • Data Warehousing
  • DBA 101
  • Design
  • Disaster Recovery or High Availability
  • Education
  • Fabric Dev Ops
  • Fabric Lakehouse
  • Fabric Lakehouses
  • Fabric Mirroring
  • Fabric Notebooks
  • Features
  • General
  • Health Checks
  • Lab
  • Microsoft Fabric
  • Newsletter
  • Performance Tuning
  • Power BI
  • ProcureSQL
  • Python
  • Reporting
  • Security
  • SQL Server
  • sql server 101
  • SQLServerPedia Syndication
  • syndication
  • The Blog
  • Uncategorized
  • Visual Studio Credit

Tags

#SQLFamily Artifical Intelligence automatic tuning availability group azure backup Backups career Data Loss Data Platform DBA Denver Differential Backup Disaster Recovery Fabric Fabric Architecture Full Backup High Availability Houston Marketing Database Administrator Microsoft Microsoft Fabric Microsoft SQL Server mirroring parameter sniffing PASS performance tuning Professional Development query store Recovery Recovery Model Restores Security SQL Saturday SQL Server SQL Server 2017 sql server 2019 SQL Server 2022 sql server 2025 SSMS System Databases Transaction Log Backup tsqltuesday Tuning Wait Stats

Archives

  • October 2026
  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • November 2025
  • October 2025
  • September 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • February 2024
  • January 2024
  • November 2023
  • October 2023
  • March 2023
  • January 2023
  • May 2022
  • April 2022
  • November 2021
  • September 2020
  • August 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • July 2019
  • April 2019
  • November 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • November 2017
  • October 2017
  • August 2017
  • July 2017
  • June 2017
  • April 2017
  • December 2016
  • November 2016
  • October 2016
  • July 2016
© Copyright 2026 - ProcureSQL - 1464 East Whitestone Blvd., Suite 1902 Cedar Park, TX 78613, USA
  • Link to Facebook
  • Link to Instagram
  • Link to LinkedIn
  • Link to Youtube
  • Link to X
Link to: Semantic Link Labs: A Key-player in Power BI Automation Link to: Semantic Link Labs: A Key-player in Power BI Automation Semantic Link Labs: A Key-player in Power BI AutomationMeagan Longoria Link to: Check Power BI Bookmarks with Semantic Link Labs Link to: Check Power BI Bookmarks with Semantic Link Labs Check Power BI Bookmarks with Semantic Link Labs
Scroll to top Scroll to top Scroll to top
Manage Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
View preferences
  • {title}
  • {title}
  • {title}