Συμβάντα "απόδοσης" σε απεικονίσεις Power BI

Για να πιστοποιήσετε μια απεικόνιση, πρέπει να περιλαμβάνει συμβάντα απόδοσης. Αυτά τα συμβάντα επιτρέπουν στους ακροατές (κυρίως, την εξαγωγή σε PDF και την εξαγωγή στο PowerPoint) να γνωρίζουν πότε αποδίδεται η απεικόνιση και πότε είναι έτοιμη για εξαγωγή.

Σημαντικό

Οποιαδήποτε απεικόνιση που εξάγει δεδομένα (για παράδειγμα, σε ένα αρχείο PowerPoint ή .pdf ) πρέπει να περιέχει συμβάντα απόδοσης για να εξασφαλίσει ότι η εξαγωγή δεν ξεκινά πριν ολοκληρωθεί η απόδοση της απεικόνισης.

Τα συμβάντα απόδοσης API αποτελούνται από τρεις μεθόδους που θα πρέπει να καλούνται κατά την απόδοση:

  • renderingStarted: Ο κώδικας απεικόνισης Power BI καλεί τη renderingStarted μέθοδο για να υποδείξει ότι η διαδικασία απόδοσης έχει ξεκινήσει. Αυτή η μέθοδος θα πρέπει να είναι πάντα η πρώτη γραμμή της μεθόδου ενημέρωσης, καθώς σε αυτό το σημείο ξεκινά η διαδικασία απόδοσης.

  • renderingFinished: Όταν η απόδοση ολοκληρωθεί με επιτυχία, ο κώδικας απεικόνισης Power BI καλεί τη renderingFinished μέθοδο για να ενημερώσει τις ακροατές ότι η εικόνα της απεικόνισης είναι έτοιμη για εξαγωγή. Αυτή η μέθοδος πρέπει να είναι η τελευταία γραμμή κώδικα που εκτελείται όταν ενημερώνεται η απεικόνιση. Συνήθως, αλλά όχι πάντα, είναι η τελευταία γραμμή της μεθόδου ενημέρωσης.

  • renderingFailed: Εάν παρουσιαστεί κάποιο πρόβλημα κατά τη διάρκεια της διαδικασίας απόδοσης, η απεικόνιση Power BI δεν αποδίδεται με επιτυχία. Για να ειδοποιήσετε τους ακροατές ότι η διαδικασία απόδοσης δεν έχει ολοκληρωθεί, ο κώδικας απεικόνισης Power BI θα πρέπει να καλέσει τη renderingFailed μέθοδο . Αυτή η μέθοδος παρέχει επίσης μια προαιρετική συμβολοσειρά για να παρέχει μια αιτία για την αποτυχία.

Σημείωμα

Τα συμβάντα απόδοσης είναι απαίτηση για την πιστοποίηση απεικονίσεων. Χωρίς αυτές, η απεικόνισή σας δεν θα εγκριθεί από το Κέντρο συνεργατών για δημοσίευση. Για περισσότερες πληροφορίες, ανατρέξτε στις απαιτήσεις πιστοποίησης.

Τρόπος χρήσης του API συμβάντων απόδοσης

Για να καλέσετε τις μεθόδους απόδοσης, πρέπει πρώτα να τις εισαγάγετε από την IVisualEventService.

  1. Στο αρχείο σας visual.ts , συμπεριλάβετε τη γραμμή:

    import IVisualEventService = powerbi.extensibility.IVisualEventService;
    
  2. IVisual Στην κλάση συμπεριλάβετε τη γραμμή:

    private events: IVisualEventService;
    
  3. constructor Στη μέθοδο της κλάσης IVisual

    this.events = options.host.eventService;
    

Τώρα, μπορείτε να καλέσετε τις this.events.renderingStarted(options);μεθόδους , this.events.renderingFinished(options);και this.events.renderingFailed(options); , κατά περίπτωση, στη μέθοδο update .

Παράδειγμα 1: Απεικόνιση χωρίς κινήσεις

Ακολουθεί ένα παράδειγμα μιας απλής απεικόνισης που χρησιμοποιεί το API απόδοσης συμβάντων .

    export class Visual implements IVisual {
        ...
        private events: IVisualEventService;
        ...

        constructor(options: VisualConstructorOptions) {
            ...
            this.events = options.host.eventService;
            ...
        }

        public update(options: VisualUpdateOptions) {
            this.events.renderingStarted(options);
            ...
            this.events.renderingFinished(options);
        }

Παράδειγμα 2: Απεικόνιση με κινήσεις

Εάν η απεικόνιση έχει κινούμενες εικόνες ή ασύγχρονες συναρτήσεις για την απόδοση, η renderingFinished μέθοδος θα πρέπει να κληθεί μετά την κίνηση ή μέσα σε ασύγχρονη συνάρτηση, ακόμα και αν δεν είναι η τελευταία γραμμή της μεθόδου ενημέρωσης .

    export class Visual implements IVisual {
        ...
        private events: IVisualEventService;
        private element: HTMLElement;
        ...

        constructor(options: VisualConstructorOptions) {
            ...
            this.events = options.host.eventService;
            this.element = options.element;
            ...
        }

        public update(options: VisualUpdateOptions) {
            this.events.renderingStarted(options);
            ...
            // Learn more at https://github.com/d3/d3-transition/blob/master/README.md#transition_end
            d3.select(this.element).transition().duration(100).style("opacity","0").end().then(() => {
                // renderingFinished called after transition end
                this.events.renderingFinished(options);
            });
        }