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 des données, des métadonnées et à évaluer des mesures dans des modèles sémantiques à l’aide de la bibliothèque SemPy Python dans Microsoft Fabric. Vous apprenez également à écrire des données que les modèles sémantiques peuvent consommer.

Prérequis

  • Accédez à l’expérience de science des données dans Microsoft Fabric.
  • Créez un bloc-notes pour copier et 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 jeux de données du référentiel fabric-samples et enregistrez-le localement.

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

Cet article utilise le modèle sémantique Customer Profitability Sample.pbix. Le modèle sémantique fait référence à une entreprise qui fabrique des matériaux marketing. Il inclut des données de produit, de client et de chiffre d’affaires pour différentes unités commerciales.

  1. Ouvrez votre espace de travail dans Fabric Data Science.
  2. Sélectionnez Importer > un rapport, un rapport paginé ou un classeur > à partir de cet ordinateur, puis sélectionnez le modèle sémantique Customer Profitability Sample.pbix .

Capture d’écran de l’interface pour le chargement d’un modèle sémantique dans l’espace de travail.

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

Capture d’écran des é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, procédez comme suit :

  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, ce qui nécessite au moins une activation en lecture seule XMLA .
    • La quantité de données récupérables est limitée par : - Mémoire maximale par requête de la référence SKU de capacité qui héberge le modèle sémantique. - Le nœud pilote Spark (visitez les tailles de nœud pour plus d’informations) qui exécute le cahier.
    • Toutes les requêtes utilisent une faible 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. Par conséquent, XMLA en lecture seule n’a pas besoin d’être activée.
    • 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 : - Mémoire maximale par requête de la référence SKU de capacité hébergeant le modèle sémantique. - Le nœud pilote Spark (visitez les tailles de nœud pour plus d’informations) qui exécute le cahier.
    • Toutes les demandes sont facturées en tant que requêtes interactives.
    • La evaluate_dax fonction n’actualise pas automatiquement le modèle sémantique. Pour plus d’informations, consultez cette page .
  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. Évaluez 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 :

  • pandas_convert_dtypes: si défini sur True, pandas convertit les colonnes du DataFrame résultant vers le type de données le plus approprié possible. En savoir plus dans convert_dtypes. Si ce paramètre est désactivé, des problèmes d’incompatibilité de type entre les colonnes de tables associées peuvent se produire. Le modèle Power BI peut ne pas détecter ces problèmes en raison d’une conversion de type implicite DAX.

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

  • multiindex_hierarchies: s’il est défini sur True, il convertit les hiérarchies Power BI en structure Pandas MultiIndex.

É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 article démontre comment écrire des données dans le Lakehouse attaché. Le FabricDataFrame fichier accepte les mêmes données d’entrée que les trames de données 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 qui inclut le modèle sémantique Lakehouse.