Partager via


Tutoriel : Créer un visuel Power BI à l’aide de React

En tant que développeur, vous pouvez créer vos propres visuels Power BI. Ces visuels peuvent être utilisés par vous, votre organisation ou des tiers.

Dans ce tutoriel, vous allez développer un visuel Power BI à l’aide de React. Le visuel affiche une valeur de mesure de mise en forme à l’intérieur d’un cercle. Le visuel a une taille adaptative et vous permet de personnaliser ses paramètres.

Dans ce tutoriel, vous allez apprendre à :

  • Créez un projet de développement pour votre visuel.
  • Développez votre visuel à l’aide de React.
  • Configurez votre visuel pour traiter les données.
  • Configurez votre visuel pour qu’il s’adapte aux changements de taille.
  • Configurez les paramètres de couleur adaptative et de bordure pour votre visuel.

Notes

Pour obtenir le code source complet de ce visuel, consultez Visuel de carte ronde React Power BI.

Prérequis

Avant de commencer à développer votre visuel Power BI, vérifiez que vous disposez de tout ce qui est indiqué dans cette section.

Créer un projet de développement

Dans cette section, vous allez créer un projet pour le visuel de carte ronde React.

  1. Ouvrez PowerShell et accédez au dossier dans lequel vous souhaitez créer votre projet.

  2. Entrez la commande suivante :

    pbiviz new ReactCircleCard
    
  3. Accédez au dossier du projet.

    cd ReactCircleCard
    
  4. Démarrez le visuel de carte ronde React. Votre visuel est maintenant exécuté tout en étant hébergé sur votre ordinateur.

    pbiviz start
    

    Important

    Pour arrêter l’exécution du visuel, entrez Ctrl+C dans PowerShell et, si vous êtes invité à arrêter le traitement par lots, entrez Y, puis appuyez sur Entrée.

Afficher la carte ronde React dans le service Power BI

Pour tester le visuel dans le service Power BI, nous allons utiliser le rapport US Sales Analysis. Vous pouvez télécharger ce rapport et le charger sur le service Power BI.

Vous pouvez également utiliser votre propre rapport pour tester le visuel.

Remarque

Avant de continuer, vérifiez que vous avez activé le mode développeur des visuels.

  1. Connectez-vous à PowerBI.com et ouvrez le rapport US Sales Analysis.

  2. Sélectionnez Modifier.

    Capture d’écran de l’option De modification dans service Power BI.

  3. Créez une nouvelle page à des fins de test en cliquant sur le bouton Nouvelle page en bas de l’interface du service Power BI.

    Capture d’écran du bouton nouvelle page dans service Power BI.

  4. Dans le volet Visualisations, sélectionnez Visuel de développeur.

    Capture d’écran du visuel de développeur dans le volet Visualisations.

    Ce visuel représente le visuel personnalisé que vous exécutez sur votre ordinateur. Il n’est disponible que lorsque le paramètre débogage de visuel personnalisé est activé.

  5. Vérifiez qu’un visuel a été ajouté au canevas de rapport.

    Capture d’écran du nouveau visuel ajouté au rapport.

    Il s’agit d’un visuel simple qui affiche le nombre de fois où sa méthode de mise à jour a été appelée. À ce stade, le visuel ne récupère aucune donnée.

    Notes

    Si le visuel affiche un message d’erreur de connexion, ouvrez un nouvel onglet dans votre navigateur, accédez à https://localhost:8080/assets et autorisez votre navigateur à utiliser cette adresse.

    Capture d’écran du nouveau visuel affichant une erreur de connexion.

  6. Pendant que le nouveau visuel est sélectionné, accédez au volet Données , développez Ventes, puis sélectionnez Quantité.

    Capture d’écran du champ service Power BI quantité dans la table des ventes dans le rapport d’analyse des ventes des États-Unis.

  7. Pour tester la réponse du visuel, redimensionnez-le et remarquez que le Nombre de mises à jour est incrémenté chaque fois que vous redimensionnez le visuel.

    Capture d’écran du nouveau visuel montrant un nombre de mises à jour différent après avoir été redimensionné.

Configurer React dans votre projet

Dans cette rubrique, vous découvrirez comment configurer React pour votre projet visuel Power BI.

Ouvrez PowerShell et arrêtez l’exécution du visuel en entrant Ctrl + C. Lorsque vous êtes invité à arrêter le programme de traitement par lots, entrez Y, puis appuyez sur Entrée.

Installer React

Pour installer les dépendances de réaction requises, ouvrez PowerShell dans votre dossier reactCircleCard, puis exécutez la commande suivante :

npm i react react-dom

Installer les définitions de type de React

Pour installer les définitions de type pour React, ouvrez PowerShell dans votre dossier reactCircleCard et exécutez la commande suivante :

npm i @types/react @types/react-dom

Créez une classe de composant React

Procédez comme suit pour créer une classe de composant React.

  1. Ouvrez VS code et accédez au dossier reactCircleCard.

  2. Créez un nouveau fichier en sélectionnant Fichier>Nouveau fichier.

  3. Copiez le code suivant dans le nouveau fichier.

    import * as React from "react";
    
    export class ReactCircleCard extends React.Component<{}>{
        render(){
            return (
                <div className="circleCard">
                    Hello, React!
                </div>
            )
        }
    }
    
    export default ReactCircleCard;
    
  4. Sélectionnez Enregistrer sous et accédez au dossier src.

  5. Mettez le fichier à jour comme suit :

    • Dans le champ Nom de fichier, entrez composant.
    • Dans le menu déroulant Enregistrer comme type, sélectionnez TypeScript React.

Ajouter React au fichier visuel

Remplacez le code dans le fichier visual.ts par le code qui permet l’utilisation de React.

  1. Dans le dossier src, ouvrez visual.ts et remplacez le code dans le fichier par le code suivant :

    "use strict";
    import powerbi from "powerbi-visuals-api";
    
    import DataView = powerbi.DataView;
    import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions;
    import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions;
    import IVisual = powerbi.extensibility.visual.IVisual;
    
    // Import React dependencies and the added component
    import * as React from "react";
    import * as ReactDOM from "react-dom";
    import ReactCircleCard from "./component";
    
    import "./../style/visual.less";
    
    export class Visual implements IVisual {
    
        constructor(options: VisualConstructorOptions) {
    
        }
    
        public update(options: VisualUpdateOptions) {
    
        }
    }
    

    Notes

    Par défaut, les paramètres TypeScript Power BI ne reconnaissent pas les fichiers React tsx, VS Code met en évidence component comme une erreur.

  2. Pour restituer le composant, ajoutez l’élément HTML cible à visual.ts. Cet élément est HTMLElement dans VisualConstructorOptions, qui est passé au constructeur.

    1. Dans le dossier src, ouvrez visual.ts.

    2. Ajoutez le code suivant à la classe Visual :

    private target: HTMLElement;
    private reactRoot: React.ComponentElement<any, any>;
    
    1. Ajoutez le code suivant au constructeur VisualConstructorOptions :
    this.reactRoot = React.createElement(ReactCircleCard, {});
    this.target = options.element;
    
    ReactDOM.render(this.reactRoot, this.target);
    

    Votre fichier visual.cs doit maintenant se présenter comme ceci :

    "use strict";
    import powerbi from "powerbi-visuals-api";
    
    import DataView = powerbi.DataView;
    import VisualConstructorOptions = powerbi.extensibility.visual.VisualConstructorOptions;
    import VisualUpdateOptions = powerbi.extensibility.visual.VisualUpdateOptions;
    import IVisual = powerbi.extensibility.visual.IVisual;
    import * as React from "react";
    import * as ReactDOM from "react-dom";
    import ReactCircleCard from "./component";    
    
    import "./../style/visual.less";
    
    export class Visual implements IVisual {
        private target: HTMLElement;
        private reactRoot: React.ComponentElement<any, any>;
    
        constructor(options: VisualConstructorOptions) {
            this.reactRoot = React.createElement(ReactCircleCard, {});
            this.target = options.element;
    
            ReactDOM.render(this.reactRoot, this.target);
        }
    
        public update(options: VisualUpdateOptions) {
    
        }
    }
    
  3. Enregistrez visual.ts.

Modifier le fichier tsconfig

Modifiez le tsconfig.json pour travailler avec React.

  1. Dans le dossier reactCircleCard, ouvrez le fichier tsconfig.json et ajoutez deux lignes au début de l’élément compilerOptions.

    "jsx": "react",
    "types": ["react", "react-dom"],
    

    Votre fichier tsconfig.json doit maintenant ressembler à ceci, et l’erreur component dans visual.ts doit être supprimée.

    {
        "compilerOptions": {
            "jsx": "react",
            "types": ["react", "react-dom"],
            "allowJs": false,
            "emitDecoratorMetadata": true,
            "experimentalDecorators": true,
            "target": "es6",
            "sourceMap": true,
            "outDir": "./.tmp/build/",
            "moduleResolution": "node",
            "declaration": true,
            "lib": [
                "es2015",
                "dom"
            ]
        },
        "files": [
            "./src/visual.ts"
        ]
    }
    
  2. Enregistrez tsconfig.json.

Tester votre visuel

Ouvrez PowerShell dans le dossier CircleCardVisual, puis exécutez votre projet :

pbiviz start

Quand vous ajoutez un nouveau Visuel de développeur à votre rapport dans le service Power BI, il se présente comme suit :

Capture d’écran montrant le message Hello React dans le nouveau visuel de développeur créé dans le service Power BI.

Configurer le champ de données de votre visuel

Configurez le fichier de fonctionnalités de votre visuel pour qu’un seul champ de données puisse être soumis au champ de Données de mesure du visuel.

  1. Dans VS Code, à partir du dossier reactCircleCard, ouvrez capabilities.json.

  2. La ReactCircleCard affiche une seule valeur, Measure Data. Supprimez l’objet Category Data de dataRoles.

    Après la suppression de l’objet Category Data, la clé dataRoles se présente comme suit :

    "dataRoles": [
        {
            "displayName": "Measure Data",
            "name": "measure",
            "kind": "Measure"
        }
    ],
    
  3. Supprimez tout le contenu de la clé objects (vous la remplirez plus tard).

    Une fois le contenu supprimé, la clé objects se présente comme suit :

    "objects": {},
    
  4. Remplacez la propriété dataViewMappings par le code suivant. max: 1 dans measure spécifie qu’un seul champ de données peut être envoyé au champ de Données de mesure du visuel.

    "dataViewMappings": [
        {
            "conditions": [
                {
                    "measure": {
                        "max": 1
                    }
                }
            ],
            "single": {
                "role": "measure"
            }
        }
    ]
    
  5. Enregistrez les modifications que vous avez apportées à capabilities.json.

  6. Vérifiez que pbiviz start est en cours d’exécution et, dans le service Power BI, actualisez votre visuel de carte ronde React. Le champ Données de mesure ne peut accepter qu’un seul champ de données, comme spécifié par max: 1.

    Capture d’écran montrant le champ de Données de mesure dans la carte ronde React dans le service Power BI.

Mettre à jour le style du visuel

Dans cette section, vous allez transformer la forme de votre visuel en cercle. Utilisez le fichier visual.less pour contrôler le style de votre visuel.

  1. Dans le dossier style, ouvrez visual.less.

  2. Remplacez le contenu de visual.less par le code suivant.

    .circleCard {
        position: relative;
        box-sizing: border-box;
        border: 1px solid #000;
        border-radius: 50%;
        width: 200px;
        height: 200px;
    }
    
    p {
        text-align: center;
        line-height: 30px;
        font-size: 20px;
        font-weight: bold;
    
        position: relative;
        top: -30px;
        margin: 50% 0 0 0;
    }
    
  3. Enregistrez visual.less.

Configurez votre visuel pour recevoir des propriétés de Power BI

Dans cette section, vous allez configurer le visuel pour recevoir des données de Power BI et envoyer des mises à jour aux instances dans le fichier component.tsx.

Restituer des données à l’aide de React

Vous pouvez restituer des données à l’aide de React. Le composant peut afficher des données à partir de son propre état.

  1. Dans VS Code, à partir du dossier reactCircleCard, ouvrez component.tsx.

  2. Remplacez le contenu de component.tsx par le code suivant.

    import * as React from "react";
    
    export interface State {
        textLabel: string,
        textValue: string
    }
    
    export const initialState: State = {
        textLabel: "",
        textValue: ""
    }
    
    export class ReactCircleCard extends React.Component<{}, State>{
        constructor(props: any){
            super(props);
            this.state = initialState;
        }
    
        render(){
            const { textLabel, textValue } = this.state;
    
            return (
                <div className="circleCard">
                    <p>
                        {textLabel}
                        <br/>
                        <em>{textValue}</em>
                    </p>
                </div>
            )
        }
    }
    
  3. Enregistrez component.tsx.

Définir votre visuel pour recevoir des données

Les visuels reçoivent les données actuelles sous la forme d’un argument de la méthode update. Dans cette section, vous allez mettre à jour cette méthode pour recevoir des données.

Le code suivant sélectionne textLabel et textValue à partir de DataView et, si les données existent, met à jour l’état du composant.

  1. Dans VS Code, à partir du dossier src, ouvrez visual.ts.

  2. Remplacez la ligne import ReactCircleCard from "./component"; par le code suivant :

    import { ReactCircleCard, initialState } from "./component";
    
  3. Ajoutez le code suivant à la méthode update .

    if(options.dataViews && options.dataViews[0]){
        const dataView: DataView = options.dataViews[0];
    
        ReactCircleCard.update({
            textLabel: dataView.metadata.columns[0].displayName,
            textValue: dataView.single.value.toString()
        });
    } else {
        this.clear();
    }
    
  4. Créez une méthode clear en ajoutant le code suivant sous la méthode update.

    private clear() {
        ReactCircleCard.update(initialState);
    }
    
  5. Enregistrez visual.ts

Définir votre visuel pour envoyer des données

Dans cette section, vous allez mettre à jour votre visuel pour envoyer des mises à jour aux instances du fichier component.

  1. Dans VS Code, à partir du dossier src, ouvrez component.tsx.

  2. Ajoutez le code suivant à la classe ReactCircleCard :

    private static updateCallback: (data: object) => void = null;
    
    public static update(newState: State) {
        if(typeof ReactCircleCard.updateCallback === 'function'){
            ReactCircleCard.updateCallback(newState);
        }
    }
    
    public state: State = initialState;
    
    public componentWillMount() {
            ReactCircleCard.updateCallback = (newState: State): void => { this.setState(newState); };
    }
    
    public componentWillUnmount() {
        ReactCircleCard.updateCallback = null;
    }
    
  3. Enregistrez component.tsx.

Afficher les modifications apportées au visuel

Testez votre visuel de carte ronde React pour afficher les modifications que vous avez apportées.

  1. Vérifiez que pbiviz start est en cours d’exécution et, dans le service Power BI, actualisez votre visuel de carte ronde React.

  2. Ajoutez Ventes dans le champ de Données de mesure du visuel.

Capture d’écran de la valeur des ventes affichée dans le visuel de carte ronde React dans le service Power BI.

Rendez votre visuel redimensionnable

Actuellement, la largeur et la hauteur du composant sont fixes. Pour rendre le visuel redimensionnable, vous devez définir la variable size dans les fichiers visual.ts et component.tsx. Dans cette section, vous rendez le visuel redimensionnable.

Une fois que vous avez effectué les étapes décrites dans cette section, le diamètre du cercle dans votre visuel correspond à la largeur ou à la hauteur minimale, et vous pouvez le redimensionner dans le service Power BI.

Configurez le fichier visual.ts

Obtenez la taille actuelle de la fenêtre d’affichage du visuel à partir de l’objet options.

  1. Dans VS Code, à partir du dossier src, ouvrez visual.ts.

  2. Insérez ce code pour importer l’interface IViewport.

    import IViewport = powerbi.IViewport;
    
  3. Ajoutez la propriété viewport à la classe visual.

    private viewport: IViewport;
    
  4. Dans la méthode update, avant ReactCircleCard.update, ajoutez le code suivant.

    this.viewport = options.viewport;
    const { width, height } = this.viewport;
    const size = Math.min(width, height);
    
  5. Dans la méthode update, dans ReactCircleCard.update, ajoutez size.

    size,
    
  6. Enregistrez visual.ts.

Configurer le fichier component.tsx

  1. Dans VS Code, à partir du dossier src, ouvrez component.tsx.

  2. Ajoutez le code suivant à export interface State.

    size: number
    
  3. Ajoutez le code suivant à export const initialState: State.

    size: 200
    
  4. Dans la méthode render, apportez les modifications suivantes au code :

    1. Ajout de size à const { textLabel, textValue, size } = this.state;. La déclaration doit maintenant ressembler à ceci :

      const { textLabel, textValue, size } = this.state;
      
    2. Ajoutez le code suivant au-dessus de return.

      const style: React.CSSProperties = { width: size, height: size };
      
    3. Remplacez la première ligne de retour<div className="circleCard"> par :

      <div className="circleCard" style={style}>
      
  5. Enregistrez component.tsx.

Configurez le fichier visuel

  1. Dans VS Code, à partir du dossier style, ouvrez visual.less.

  2. Dans .circleCard, remplacez width et height par min-width et min-height.

    min-width: 200px;
    min-height: 200px;
    
  3. Enregistrez visual.less.

Rendre votre visuel Power BI personnalisable

Dans cette section, vous ajoutez la possibilité de personnaliser votre visuel, ce qui permet aux utilisateurs d’apporter des modifications à la couleur et l’épaisseur de la bordure.

Ajouter la couleur et l’épaisseur au fichier de fonctionnalités

Ajoutez la couleur et l’épaisseur de la bordure à la propriété object dans capabilities.json.

  1. Dans VS Code, à partir du dossier reactCircleCard, ouvrez capabilities.json.

  2. Ajoutez les paramètres suivants à la propriété objects.

    "circle": {
        "properties": {
           "circleColor": {
                "type": {
                    "fill": {
                        "solid": {
                            "color": true
                        }
                    }
                }
            },
            "circleThickness": {
                "type": {
                    "numeric": true
                }
            }
        }
    }
    
  3. Ouvrez capabilities.json.

Ajouter une classe de paramètres de mise en forme circulaire au fichier de paramètres

Ajoutez les paramètres de mise en forme Circle à settings.ts. Pour plus d’informations sur la création de paramètres de modèle de mise en forme, consultez Utilitaires de mise en forme.

  1. Dans VS Code, à partir du dossier src, ouvrez settings.ts.

  2. Remplacez le code de settings.ts par le code suivant :

    "use strict";
    
    import { formattingSettings } from "powerbi-visuals-utils-formattingmodel";
    
    import FormattingSettingsCard = formattingSettings.SimpleCard;
    import FormattingSettingsSlice = formattingSettings.Slice;
    import FormattingSettingsModel = formattingSettings.Model;
    
    /**
    * Circle Formatting Card
    */
    class CircleCardSettings extends FormattingSettingsCard {
        circleColor = new formattingSettings.ColorPicker({
            name: "circleColor", // circle color name should match circle color property name in capabilities.json
            displayName: "Color",
            description: "The fill color of the circle.",
            show: true,
            value: { value: "white" }
        });
    
        circleThickness = new formattingSettings.NumUpDown({
            name: "circleThickness", // circle thickness name should match circle color property name in capabilities.json
            displayName: "Thickness",
            description: "The circle thickness.",
            show: true,
            value: 2
        });
    
        name: string = "circle"; // circle card name should match circle object name in capabilities.json
        displayName: string = "Circle";
        show: boolean = true;
        slices: Array<FormattingSettingsSlice> = [this.circleColor, this.circleThickness];
    }
    
    /**
    * visual settings model class
    *
    */
    export class VisualFormattingSettingsModel extends FormattingSettingsModel {
        // Create formatting settings model circle formatting card
        circleCard = new CircleCardSettings();
    
        cards = [this.circleCard];
    }
    
  3. Enregistrez settings.ts.

Ajouter une méthode pour appliquer des paramètres visuels

Ajoutez la méthode getFormattingModel utilisée pour appliquer les paramètres visuels et les importations requises dans le fichier visual.ts.

  1. Dans VS Code, à partir du dossier src, ouvrez visual.ts.

  2. Ajoutez ces instructions import en haut de visual.ts.

    import { FormattingSettingsService } from "powerbi-visuals-utils-formattingmodel";
    import { VisualFormattingSettingsModel } from "./settings";
    
  3. Ajoutez la déclaration suivante à Visual.

    private formattingSettings: VisualFormattingSettingsModel;
    private formattingSettingsService: FormattingSettingsService;
    
  4. Ajoutez la méthode getFormattingModel à Visual.

    public getFormattingModel(): powerbi.visuals.FormattingModel {
        return this.formattingSettingsService.buildFormattingModel(this.formattingSettings);
    }
    
  5. Dans la classe Visual, ajoutez la ligne de code suivante à constructor pour initialiser formattingSettingsService

        this.formattingSettingsService = new FormattingSettingsService();
    
    
  6. Dans la classe Visual, ajoutez le code suivant à update pour mettre à jour les paramètres de mise en forme visuelle vers les dernières valeurs des propriétés de mise en forme.

    1. Ajoutez ce code à l’instruction si après const size = Math.min(width, height);.

      this.formattingSettings = this.formattingSettingsService.populateFormattingSettingsModel(VisualFormattingSettingsModel, options.dataViews[0]);
      const circleSettings = this.formattingSettings.circleCard;
      
    2. Ajouter ce code à ReactCircleCard.update après size :

      borderWidth: circleSettings.circleThickness.value,
      background: circleSettings.circleColor.value.value,
      }
      
  7. Enregistrez visual.ts.

Modifier le fichier composant

Modifiez le fichier composant pour qu’il puisse restituer les modifications apportées à la couleur et l’épaisseur de la bordure du visuel.

  1. Dans VS Code, à partir du dossier src, ouvrez component.tsx.

  2. Ajoutez ces valeurs à State :

    background?: string,
    borderWidth?: number
    
  3. Dans la méthode render, remplacez les lignes de code suivantes :

    1. const { textLabel, textValue, size } = this.state; avec :

      const { textLabel, textValue, size, background, borderWidth } = this.state;
      
    2. const style: React.CSSProperties = { width: size, height: size }; avec :

      const style: React.CSSProperties = { width: size, height: size, background, borderWidth };
      
  4. Enregistrez component.tsx.

Réviser vos modifications

Expérimentez la couleur et l’épaisseur de la bordure du visuel, que vous pouvez maintenant contrôler.

  1. Vérifiez que pbiviz start est en cours d’exécution et, dans le service Power BI, actualisez votre visuel de carte ronde React.

  2. Sélectionnez l’onglet Format et développez Cercle.

  3. Ajustez les paramètres de Couleur et d’Épaisseur du visuel, puis examinez leur effet sur le visuel.

Capture d’écran de la carte ronde React dans le service Power BI, montrant les options de format de couleur et d’épaisseur de bordure.