Megosztás a következőn keresztül:


A Visual Filters API Power BI-vizualizációkban

A Visual Filters API lehetővé teszi az adatok szűrését a Power BI-vizualizációkban. A szűrő API és az adatok kiválasztásának egyéb módjai közötti fő különbség az, hogy az hogyan befolyásolja a jelentés más vizualizációit. Ha szűrőt alkalmaz egy vizualizációra, csak a szűrt adatok jelennek meg minden vizualizációban, annak ellenére, hogy más vizualizációk támogatják.

A vizualizáció szűrésének engedélyezéséhez a capabilities.json fájlnak tartalmaznia kell egy filter objektumot a general szakaszban.

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

Megjegyzés:

  • A vizualizációszűrők API-felületei a powerbi-models csomagban érhetők el. Ez a csomag a szűrőpéldányok létrehozásához is tartalmaz osztályokat.

    npm install powerbi-models --save
    
  • Ha az eszközök régebbi (3.x.x-nél korábbi) verzióját használja, vegye fel powerbi-models a vizualizációk csomagba. További információt a Speciális szűrő API hozzáadása az egyéni vizualizációhoz című rövid útmutatóban talál. Ha meg szeretné tudni, hogy melyik verziót használja, ellenőrizze a apiVersion pbiviz.json fájlban.

Az összes szűrő az interfészt IFilterhasználja, ahogy az a következő kódban is látható:

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

Hol target található egy táblaoszlop az adatforrásban?

Három szűrő API létezik:

Az Alapszintű szűrő API

Az alapszintű szűrőfelület a következő kódban jelenik meg:

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

Ahol:

  • operatoraz In, NotIn és All értékeket tartalmazó enumerálás.
  • values a feltétel értékei.

Példa alapszintű szűrőre

Az alábbi példa az összes olyan sort adja vissza, ahol col1 az érték 1, 2 vagy 3.

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

A fenti példa SQL-megfelelője a következő:

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

Szűrő létrehozásához használhatja a BasicFilter osztályt a következőben powerbi-models: .

Ha az eszköz régebbi verzióját használja, a következő kódban látható módon le kell szereznie egy modellpéldányt az ablakobjektumban 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);

A vizualizáció meghívja a szűrőt úgy, hogy meghívja a applyJsonFilter() metódust a gazdafelületen, IVisualHostamelyet a vizualizáció a konstruktor metódusban biztosít.

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

Az Advanced Filter API

Az Advanced Filter API összetett, több feltételen alapuló adatpont-kiválasztást és szűrést tesz lehetővé, például LessThan, Contains, IsBlank stb.).

Ez a szűrő a Visuals API 1.7.0-s verziójában lett bevezetve.

Az Alapszintű API-val szemben az Advanced Filter API-ban:

  • Ehhez target egy és column egy table név is szükséges (az Egyszerű API-nak most voltcolumn).
  • Az operátorok and and or (szemben az Invel).
  • A szűrő a felülettel rendelkező értékek helyett feltételeket használ (kisebb, nagyobb, mint stb.):
interface IAdvancedFilterCondition {
    value: (string | number | boolean);
    operator: AdvancedFilterConditionOperators;
}

A paraméter feltételes operátorai a operator következők: None, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, Contains, DoesNotContain, StartsWith, DoesNotStartWith, Is, IsNot, IsBlank és "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);

Az SQL-ekvivalens a következő:

SELECT * FROM table WHERE col1 < 0;

Az Advanced Filter API használatához szükséges teljes mintakódot a Sampleslicer vizualizációs adattárban keresheti meg.

A Tuple Filter API (többoszlopos szűrő)

A Tuple Filter API a Visuals API 2.3.0-s kiadásában jelent meg. Hasonló az Alapszintű szűrő API-hoz, de lehetővé teszi több oszlop és tábla feltételeinek meghatározását.

A szűrőfelület a következő kódban jelenik meg:

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

Ahol

  • target táblázatnevekkel rendelkező oszlopok tömbje:

    declare type ITupleFilterTarget = IFilterTarget[];
    

    A szűrő különböző táblák oszlopait képes kezelni.

  • $schema az https://powerbi.com/product/schema#tuple.

  • filterType a FilterType.Tuple.

  • operator csak az In operátorban használható.

  • values az érték-skálák tömbje. Minden rekord a céloszlop értékeinek egy engedélyezett kombinációját jelöli.

declare type TupleValueType = ITupleElementValue[];

interface ITupleElementValue {
    value: PrimitiveValueType
}

Teljes példa:

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);

Fontos

Az oszlopnevek és a feltételértékek sorrendje fontos.

A fenti kód SQL-megfelelője a következő:

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

A JSON-szűrő visszaállítása az adatnézetből

Az API 2.2.0-s verziójától kezdve visszaállíthatja a JSON-szűrőt a VisualUpdateOptions szolgáltatásból, ahogyan az az alábbi kódban látható:

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

Könyvjelzők váltásakor a Power BI meghívja a update vizualizáció metódusát, és a vizualizáció egy megfelelő filter objektumot kap. További információ: Könyvjelző-támogatás hozzáadása Power BI-vizualizációkhoz.

JSON-mintaszűrő

Az alábbi képen néhány JSON-szűrőkód látható:

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

A JSON-szűrő törlése

A szűrő alaphelyzetbe állításához vagy törléséhez adjon át egy null értéket a szűrő API-nak.

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

A Power BI-vizualizációk kijelöléseinek használata a vizualizációk interaktivitásának hozzáadásához