Partager via


Lire à partir de modèles sémantiques et écrire des données consommables par Power BI à l’aide de Python

Dans cet article, vous allez apprendre à lire les données et les métadonnées et à évaluer les mesures dans les modèles sémantiques à l’aide de la bibliothèque Python SemPy dans Microsoft Fabric. Vous apprendrez également à écrire des données que les modèles sémantiques peuvent consommer.

Prérequis

  • Accédez à l'expérience Science des données dans Microsoft Fabric.
  • Créez un notebook pour copier/coller du code dans des cellules.
  • Pour Spark 3.4 et versions ultérieures, le lien sémantique est disponible dans le runtime par défaut lors de l’utilisation de Fabric et il n’est pas nécessaire de l’installer. Si vous utilisez Spark 3.3 ou version inférieure, ou si vous souhaitez effectuer une mise à jour vers la version la plus récente du lien sémantique, vous pouvez exécuter la commande : python %pip install -U semantic-link  
  • Ajoutez un Lakehouse à votre notebook.
  • Téléchargez le modèle sémantique Customer Profitability Sample.pbix à partir du dossier des jeux de données du référentiel fabric-samples, et enregistrez le modèle sémantique localement.

Charger le modèle sémantique dans votre espace de travail

Cet article utilise le modèle sémantique Customer Profitability Sample.pbix. Ce modèle sémantique fait référence à une entreprise créant des documents marketing. Il contient des données de produits et de clients ainsi que des données de chiffres d’affaires correspondantes pour différentes unités commerciales.

  1. Ouvrez votre espace de travail dans Science des données Fabric.
  2. Sélectionnez Charger > Parcourir, puis le modèle sémantique Customer Profitability Sample.pbix.

Capture d’écran montrant l’interface permettant de télécharger un modèle sémantique dans l’espace de travail.

Une fois le chargement terminé, votre espace de travail comporte trois nouveaux artefacts : un rapport Power BI, un tableau de bord et un modèle sémantique intitulé Customer Profitability Sample. Les étapes décrites dans cet article s’appuient sur ce modèle sémantique.

Capture d’écran montrant les éléments du fichier Power BI chargé dans l’espace de travail.

Utiliser Python pour lire des données à partir de modèles sémantiques

L’API SemPy Python peut récupérer des données et des métadonnées à partir de modèles sémantiques situés dans un espace de travail Microsoft Fabric. L’API peut également exécuter des requêtes sur ces données.

Votre notebook, votre modèle sémantique de jeu de données Power BI et votre lakehouse peuvent être situés dans le même espace de travail ou dans des espaces de travail différents. Par défaut, SemPy tente d’accéder à votre modèle sémantique à partir de :

  • L'espace de travail de votre maison de lac, si vous avez attaché une maison de lac à votre carnet.
  • L’espace de travail de votre notebook, s’il n’y a pas de lakehouse attaché.

Si votre modèle sémantique n'est pas situé dans l'un de ces espaces de travail, vous devez spécifier l'espace de travail de votre modèle sémantique lorsque vous appelez une méthode SemPy.

Pour lire des données à partir de modèles sémantiques :

  1. Répertoriez les modèles sémantiques disponibles dans votre espace de travail.

    import sempy.fabric as fabric
    
    df_datasets = fabric.list_datasets()
    df_datasets
    
  2. Répertoriez les tables disponibles dans le modèle sémantique Customer Profitability Sample.

    df_tables = fabric.list_tables("Customer Profitability Sample", include_columns=True)
    df_tables
    
  3. Répertoriez les mesures définies dans le modèle sémantique Customer Profitability Sample.

    Conseil

    Dans l’exemple de code suivant, nous avons spécifié l’espace de travail pour SemPy à utiliser pour accéder au modèle sémantique. Vous pouvez remplacer Your Workspace par le nom de l’espace de travail où vous avez chargé le modèle sémantique (à partir de la section Charger le modèle sémantique dans votre espace de travail).

    df_measures = fabric.list_measures("Customer Profitability Sample", workspace="Your Workspace")
    df_measures
    

    Ici, nous avons déterminé que la table Customer est la table d’intérêt.

  4. Lisez la table Client à partir du modèle sémantique Customer Profitability Sample.

    df_table = fabric.read_table("Customer Profitability Sample", "Customer")
    df_table
    

    Remarque

    • Les données sont récupérées à l’aide de XMLA. Cela nécessite au moins l’activation de XMLA en lecture seule.
    • La quantité de données récupérables est limitée par la mémoire maximale par requête de la référence SKU de capacité qui héberge le modèle sémantique et par le nœud de pilote Spark (voir tailles de nœud pour plus d’informations) qui exécute le notebook.
    • Toutes les requêtes utilisent une basse priorité pour réduire l’impact sur les performances de Microsoft Azure Analysis Services, et sont facturées en tant que requêtes interactives.
  5. Évaluez la mesure Total Revenue pour l’état et la date de chaque client.

    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["'Customer'[State]", "Calendar[Date]"])
    df_measure
    

    Remarque

    • Par défaut, les données ne sont pas récupérées à l’aide de XMLA et ne nécessitent donc pas d’activation de XMLA en lecture seule.
    • Les données ne sont pas soumises aux limitations du back-end Power BI.
    • La quantité de données récupérables est limitée par la mémoire maximale par requête de la référence SKU de capacité qui héberge le modèle sémantique et par le nœud de pilote Spark (voir tailles de nœud pour plus d’informations) qui exécute le notebook.
    • Toutes les requêtes sont facturées en tant que requêtes interactives.
  6. Pour ajouter des filtres au calcul de mesure, spécifiez une liste de valeurs autorisées pour une colonne particulière.

    filters = {
        "State[Region]": ["East", "Central"],
        "State[State]": ["FLORIDA", "NEW YORK"]
    }
    df_measure = fabric.evaluate_measure(
        "Customer Profitability Sample",
        "Total Revenue",
        ["Customer[State]", "Calendar[Date]"],
        filters=filters)
    df_measure
    
  7. Vous pouvez également évaluer la mesure Total Revenue par état et date du client avec une requête DAX.

    df_dax = fabric.evaluate_dax(
        "Customer Profitability Sample",
        """
        EVALUATE SUMMARIZECOLUMNS(
            'State'[Region],
            'Calendar'[Date].[Year],
            'Calendar'[Date].[Month],
            "Total Revenue",
            CALCULATE([Total Revenue]))
        """)
    

    Remarque

    • Les données sont récupérées à l’aide de XMLA, et nécessitent donc au moins l’activation de XMLA en lecture seule.
    • La quantité de données récupérables est limitée par la mémoire disponible dans Microsoft Azure Analysis Services et le nœud de pilote Spark (voir tailles de nœud pour plus d’informations).
    • Toutes les requêtes utilisent une basse priorité pour réduire l’impact sur les performances d’Analysis Services, et sont facturées en tant que requêtes interactives.
  8. Utilisez le magic de cellule %%dax pour évaluer la même requête DAX sans avoir à importer la bibliothèque. Exécutez cette cellule pour charger le magic de cellule %%dax :

    %load_ext sempy
    

    Le paramètre d’espace de travail est facultatif. Il suit les mêmes règles que le paramètre d’espace de travail de la fonction evaluate_dax.

    Le magic de cellule prend également en charge l’accès aux variables Python avec la syntaxe {variable_name}. Pour utiliser une accolade dans la requête DAX, échappez-la avec une autre accolade (par exemple : EVALUATE {{1}}).

    %%dax "Customer Profitability Sample" -w "Your Workspace"
    EVALUATE SUMMARIZECOLUMNS(
        'State'[Region],
        'Calendar'[Date].[Year],
        'Calendar'[Date].[Month],
        "Total Revenue",
        CALCULATE([Total Revenue]))
    

    Le FabricDataFrame résultant est disponible via la variable _. Cette variable capture la sortie de la dernière cellule exécutée.

    df_dax = _
    
    df_dax.head()
    
  9. Vous pouvez ajouter des mesures aux données récupérées à partir de sources externes. Cette approche combine trois tâches :

    • Elle résout les noms de colonnes en dimensions Power BI.
    • Elle définit le groupe par colonnes.
    • Elle filtre la mesure. Les noms de colonnes qui ne peuvent pas être résolus dans le modèle sémantique donné sont ignorés (consultez la ressource Syntaxe DAX prise en charge pour plus d’informations).
    from sempy.fabric import FabricDataFrame
    
    df = FabricDataFrame({
            "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"],
            "Customer[Country/Region]": ["US", "GB", "US"],
            "Industry[Industry]": ["Services", "CPG", "Manufacturing"],
        }
    )
    
    joined_df = df.add_measure("Total Revenue", dataset="Customer Profitability Sample")
    joined_df
    

Paramètres spéciaux

Les méthodes SemPy read_table et evaluate_measure ont plus de paramètres utiles pour manipuler la sortie. Ces paramètres sont les suivants :

  • fully_qualified_columns : pour une valeur « True », les méthodes retournent des noms de colonnes au format TableName[ColumnName].
  • num_rows : nombre de lignes à afficher dans le résultat.
  • pandas_convert_dtypes : pour une valeur « True », pandas convertit les colonnes DataFrame obtenues en le meilleur dtypeconvert_dtypes possible. Si ce paramètre est désactivé, des problèmes d’incompatibilité de type peuvent survenir entre les colonnes de tables liées ; le modèle Power BI risque de ne pas détecter ces problèmes en raison de la conversion implicite de type DAX.

SemPy read_table utilise également les informations de modèle fournies par Power BI.

  • multiindex_hierarchies : si la valeur est « True », cela convertit les hiérarchies de Power BI en structure MultiIndex pandas.

Écrire des données consommables par des modèles sémantiques

Les tables Spark ajoutées à un Lakehouse sont automatiquement ajoutées au modèle sémantique par défaut correspondant. Cet exemple montre comment écrire des données dans le Lakehouse attaché. FabricDataFrame accepte les mêmes données d’entrée que les Dataframes de Pandas.

from sempy.fabric import FabricDataFrame

df_forecast = FabricDataFrame({'ForecastedRevenue': [1, 2, 3]})

df_forecast.to_lakehouse_table("ForecastTable")

Avec Power BI, la table ForecastTable peut être ajoutée à un modèle sémantique composite avec le modèle sémantique Lakehouse.