Sempy

Refreshing Power BI Datasets with Notebooks

The sempy Python library in Fabric is quite powerful and offers a range of capabilities that make working with Fabric environments more efficient and flexible. One of the most useful features I’ve implemented in my projects is the ability to trigger semantic model refreshes directly from a Spark notebook.

This approach allows to trigger the refresh right after the data load is finished.

import sempy.fabric as fabric
import time

workspace = fabric.resolve_workspace_name()
dataset = "My_Amazing_Semantic_Model"

refresh_request_id = fabric.refresh_dataset(workspace=workspace, dataset=dataset, refresh_type="full")

# refresh api is async, so we need to poll until it completes
while True:
    time.sleep(60)

    res = fabric.get_refresh_execution_details(
        dataset=dataset, workspace=workspace, refresh_request_id=refresh_request_id
    )

    if res.status != "Unknown":
        break

if res.status == "Completed":
    print(f"Refresh Dataset completed with success {res.extended_status}")
else:
    errors = res.messages["Message"].str.cat(sep="\n")
    raise Exception(f"Refresh Dataset failed: \n\n{errors}")

This script starts by resolving the current workspace and identifying the target dataset. It then initiates a full refresh of that dataset and waits for the process to complete, checking periodically for updates.