Το API οπτικών φίλτρων στις απεικονίσεις Power BI

Το API οπτικών φίλτρων σάς επιτρέπει να φιλτράρετε δεδομένα σε απεικονίσεις Power BI. Η κύρια διαφορά μεταξύ του API φίλτρου και άλλων τρόπων επιλογής δεδομένων είναι ο τρόπος με τον οποίο επηρεάζουν άλλες απεικονίσεις στην αναφορά. Όταν εφαρμόζεται ένα φίλτρο σε μια απεικόνιση, μόνο τα φιλτραρισμένη δεδομένα θα είναι ορατά σε όλες τις απεικονίσεις, παρά την υποστήριξη επισήμανσης από άλλες απεικονίσεις.

Για να ενεργοποιήσετε το φιλτράρισμα για την απεικόνιση, το αρχείο capabilities.json θα πρέπει να περιέχει ένα filter αντικείμενο στην general ενότητα.

"objects": {
        "general": {
            "displayName": "General",
            "displayNameKey": "formattingGeneral",
            "properties": {
                "filter": {
                    "type": {
                        "filter": true
                    }
                }
            }
        }
    }

Σημείωμα

  • Οι διασυνδέσεις API οπτικών φίλτρων είναι διαθέσιμες στο πακέτο powerbi-models . Αυτό το πακέτο περιέχει επίσης κλάσεις για τη δημιουργία παρουσιών φίλτρου.

    npm install powerbi-models --save
    
  • Εάν χρησιμοποιείτε μια παλαιότερη έκδοση (προγενέστερη της 3.x.x), συμπεριλάβετε powerbi-models το στο πακέτο απεικονίσεων. Για περισσότερες πληροφορίες, ανατρέξτε στον σύντομο οδηγό, Προσθήκη του API φίλτρου για προχωρημένους στην προσαρμοσμένη απεικόνιση. Για να μάθετε ποια έκδοση χρησιμοποιείτε, ελέγξτε το apiVersion στο αρχείο pbiviz.json .

Όλα τα φίλτρα χρησιμοποιούν τη IFilter διασύνδεση , όπως φαίνεται στον παρακάτω κώδικα:

export interface IFilter {
        $schema: string;
        target: IFilterTarget;
}

Όπου target το είναι μια στήλη πίνακα στην προέλευση δεδομένων.

Υπάρχουν τρία API φίλτρου:

Το API βασικού φίλτρου

Η διασύνδεση βασικού φίλτρου εμφανίζεται στον παρακάτω κώδικα:

export interface IBasicFilter extends IFilter {
    operator: BasicFilterOperators;
    values: (string | number | boolean)[];
}

Όπου:

  • operator Το είναι μια απαρίθμηση με τις τιμές In, NotIn, και All.
  • values Είναι τιμές για τη συνθήκη.

Παράδειγμα βασικού φίλτρου

Το παρακάτω παράδειγμα επιστρέφει όλες τις γραμμές όπου col1 ισούται με την τιμή 1, 2 ή 3.

let basicFilter = {
    target: {
        column: "Col1"
    },
    operator: "In",
    values: [1,2,3]
}

Το ισοδύναμο SQL του παραπάνω παραδείγματος είναι:

SELECT * FROM table WHERE col1 IN ( 1 , 2 , 3 )

Για να δημιουργήσετε ένα φίλτρο, μπορείτε να χρησιμοποιήσετε την κλάση BasicFilter στο powerbi-models.

Εάν χρησιμοποιείτε μια παλαιότερη έκδοση του εργαλείου, θα πρέπει να λάβετε μια παρουσία μοντέλων στο αντικείμενο παραθύρου χρησιμοποιώντας window['powerbi-models']το , όπως φαίνεται στον παρακάτω κώδικα:

let categories: DataViewCategoricalColumn = this.dataView.categorical.categories[0];

let target: IFilterColumnTarget = {
    table: categories.source.queryName.substr(0, categories.source.queryName.indexOf('.')),
    column: categories.source.displayName
};

let values = [ 1, 2, 3 ];

let filter: IBasicFilter = new window['powerbi-models'].BasicFilter(target, "In", values);

Η απεικόνιση καλεί το φίλτρο καλώντας τη applyJsonFilter() μέθοδο στη διασύνδεση κεντρικού υπολογιστή, IVisualHost, η οποία παρέχεται στην απεικόνιση στη μέθοδο κατασκευής.

IVisualHost.applyJsonFilter(filter, "general", "filter", FilterAction.merge);

Το API φίλτρου για προχωρημένους

Το API φίλτρου για προχωρημένους επιτρέπει σύνθετα ερωτήματα φιλτραρίσματος και επιλογής σημείου δεδομένων σε πολλές απεικονίσεις που βασίζονται σε πολλαπλά κριτήρια, όπως LessThan, Contains, Is, IsBlank και ούτω καθεξής).

Αυτό το φίλτρο παρουσιάστηκε στην έκδοση 1.7.0 του API απεικονίσεων.

Σε αντίθεση με το Βασικό API, στο API φίλτρου για προχωρημένους:

  • Η target απαιτεί table όνομα και column (το βασικό API μόλις είχε column).
  • Οι τελεστές είναι And και Or (σε αντίθεση με το In).
  • Το φίλτρο χρησιμοποιεί συνθήκες (μικρότερες από, μεγαλύτερες από κ.λπ.) αντί για τιμές με τη διασύνδεση:
interface IAdvancedFilterCondition {
    value: (string | number | boolean);
    operator: AdvancedFilterConditionOperators;
}

Οι τελεστές συνθήκης για την operator παράμετρο είναι: None, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Contains, DoesNotContain, StartsWith, DoesNotStartWith, Is, IsNot, IsBlank και "IsNotBlank"'

let categories: DataViewCategoricalColumn = this.dataView.categorical.categories[0];

let target: IFilterColumnTarget = {
    table: categories.source.queryName.substr(0, categories.source.queryName.indexOf('.')), // table
    column: categories.source.displayName // col1
};

let conditions: IAdvancedFilterCondition[] = [];

conditions.push({
    operator: "LessThan",
    value: 0
});

let filter: IAdvancedFilter = new window['powerbi-models'].AdvancedFilter(target, "And", conditions);

// invoke the filter
visualHost.applyJsonFilter(filter, "general", "filter", FilterAction.merge);

Το ισοδύναμο σε SQL είναι:

SELECT * FROM table WHERE col1 < 0;

Για το πλήρες δείγμα κώδικα για τη χρήση του API φίλτρου για προχωρημένους, μεταβείτε στο αποθετήριο απεικονίσεων Sampleslicer.

Το API φίλτρου πλειάδας (φίλτρο πολλαπλών στηλών)

Το API φίλτρου πλειάδας παρουσιάστηκε στο API απεικονίσεων 2.3.0. Είναι παρόμοιο με το API βασικού φίλτρου, αλλά σας επιτρέπει να ορίζετε συνθήκες για πολλές στήλες και πίνακες.

Η διασύνδεση φίλτρου εμφανίζεται στον παρακάτω κώδικα:

interface ITupleFilter extends IFilter {
    $schema: string;
    filterType: FilterType;
    operator: TupleFilterOperators;
    target: ITupleFilterTarget;
    values: TupleValueType[];
}

Όπου

  • target Το είναι ένας πίνακας στηλών με ονόματα πινάκων:

    declare type ITupleFilterTarget = IFilterTarget[];
    

    Το φίλτρο μπορεί να απευθυνθεί σε στήλες από διάφορους πίνακες.

  • $schema το είναι https://powerbi.com/product/schema#tuple.

  • filterType Το είναι FilterType.Tuple.

  • operator Το επιτρέπει τη χρήση μόνο στον τελεστή In .

  • values Το είναι ένας πίνακας συνάθροειων τιμών. Κάθε πλειάδα αντιπροσωπεύει έναν επιτρεπόμενο συνδυασμό των τιμών στήλης προορισμού.

declare type TupleValueType = ITupleElementValue[];

interface ITupleElementValue {
    value: PrimitiveValueType
}

Πλήρες παράδειγμα:

let target: ITupleFilterTarget = [
    {
        table: "DataTable",
        column: "Team"
    },
    {
        table: "DataTable",
        column: "Value"
    }
];

let values = [
    [
        // the first column combination value (or the column tuple/vector value) that the filter will pass through
        {
            value: "Team1" // the value for the `Team` column of the `DataTable` table
        },
        {
            value: 5 // the value for the `Value` column of the `DataTable` table
        }
    ],
    [
        // the second column combination value (or the column tuple/vector value) that the filter will pass through
        {
            value: "Team2" // the value for `Team` column of `DataTable` table
        },
        {
            value: 6 // the value for `Value` column of `DataTable` table
        }
    ]
];

let filter: ITupleFilter = {
    $schema: "https://powerbi.com/product/schema#tuple",
    filterType: FilterType.Tuple,
    operator: "In",
    target: target,
    values: values
}

// invoke the filter
visualHost.applyJsonFilter(filter, "general", "filter", FilterAction.merge);

Σημαντικό

Η σειρά των ονομάτων στηλών και τιμών συνθήκης είναι σημαντική.

Το ισοδύναμο SQL του παραπάνω κώδικα είναι:

SELECT * FROM DataTable WHERE ( Team = "Team1" AND Value = 5 ) OR ( Team = "Team2" AND Value = 6 );

Επαναφορά του φίλτρου JSON από την προβολή δεδομένων

Ξεκινώντας με την έκδοση API 2.2.0, μπορείτε να επαναφέρετε το φίλτρο JSON από VisualUpdateOptions, όπως φαίνεται στον παρακάτω κώδικα:

export interface VisualUpdateOptions extends extensibility.VisualUpdateOptions {
    viewport: IViewport;
    dataViews: DataView[];
    type: VisualUpdateType;
    viewMode?: ViewMode;
    editMode?: EditMode;
    operationKind?: VisualDataChangeOperationKind;
    jsonFilters?: IFilter[];
}

Όταν εναλλάσσετε σελιδοδείκτες, το Power BI καλεί τη update μέθοδο της απεικόνισης και η απεικόνιση λαμβάνει ένα αντίστοιχο filter αντικείμενο. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Προσθήκη υποστήριξης σελιδοδεικτών για απεικονίσεις Power BI.

Δείγμα φίλτρου JSON

Στην παρακάτω εικόνα εμφανίζεται ένα δείγμα κώδικα φίλτρου JSON:

Screenshot of sample JSON filter code showing values in an array.

Απαλοιφή του φίλτρου JSON

Για να επαναφέρετε ή να καταργήσετε το φίλτρο, μεταβιβάστε μια null τιμή στο API φίλτρου.

// invoke the filter
visualHost.applyJsonFilter(null, "general", "filter", FilterAction.merge);

Χρήση επιλογών απεικονίσεων Power BI για την προσθήκη αλληλεπίδρασης σε μια απεικόνιση