Mengontrol filter laporan

Saat menyematkan laporan Power BI, Anda bisa menerapkan filter secara otomatis selama fase pemuatan, atau Anda bisa mengubah filter secara dinamis setelah laporan dimuat. Misalnya, Anda dapat membuat panel filter kustom Anda sendiri dan secara otomatis menerapkan filter tersebut ke laporan untuk menampilkan wawasan spesifik pengguna. Anda juga dapat membuat tombol yang memungkinkan pengguna menerapkan filter ke laporan yang disematkan.

Jenis filter berikut ini didukung:

Atribut objek filter

Semua jenis filter mewarisi IFilter antarmuka. Atribut yang tercantum di bawah ini relevan untuk semua jenis filter.

interface IFilter {
    $schema: string;
    target: IFilterGeneralTarget;
    filterType: FilterType;
    displaySettings?: IFilterDisplaySettings;
}

Skema

Atribut $schema menentukan jenis filter. Ada lima skema yang tersedia, satu untuk setiap jenis filter:

  • Dasar - http://powerbi.com/product/schema#basic
  • Lanjutan - http://powerbi.com/product/schema#advanced
  • Tanggal relatif - http://powerbi.com/product/schema#relativeDate
  • Waktu relatif - http://powerbi.com/product/schema#relativeTime
  • N Teratas - http://powerbi.com/product/schema#topN

Pengaturan tampilan

Atribut displaySettings , menentukan cara filter ditampilkan di panel filter.

interface IFilterDisplaySettings {
    isLockedInViewMode?: boolean;
    isHiddenInViewMode?: boolean;
    displayName?: string;
}
  • isLockedInViewMode - Filter terkunci diterapkan dan ditampilkan di panel filter. Nilai filter tidak dapat diubah dalam mode tampilan. Atur ke true untuk mengunci filter.

  • isHiddenInViewMode - Filter tersembunyi diterapkan ke laporan tetapi tidak ditampilkan di panel filter dalam mode tampilan. Atur ke true untuk menyembunyikan filter.

  • displayName - Filter dapat ditampilkan di panel filter dengan nama yang dipersonalisasi. Gunakan atribut ini untuk mengatur nama yang dipersonalisasi untuk filter Anda. Ketika nilai tidak terdefinisi atau null, nama default filter akan ditampilkan (biasanya nama bidang data yang difilter).

Jenis filter

Atribut filterType menentukan jenis filter. Gunakan enum berikut, yang ditentukan dalam pustaka model:

enum FilterType {
    Advanced = 0,
    Basic = 1,
    Unknown = 2,
    IncludeExclude = 3,
    RelativeDate = 4,
    TopN = 5,
    Tuple = 6,
    RelativeTime = 7,
}

Target

Atribut target menentukan target filter. Untuk informasi selengkapnya, lihat Menggunakan target untuk memilih bidang data mana yang akan ditindak lanjuti.

Atribut tambahan menurut jenis filter

Setiap jenis filter memiliki antarmukanya sendiri dengan sekumpulan atribut yang berbeda. Antarmuka filter adalah bagian dari pustaka powerbi-models .

Filter dasar

Filter dasar memiliki operator tunggal dengan satu atau beberapa nilai.

interface IBasicFilter extends IFilter {
    operator: BasicFilterOperators;
    values: (string | number | boolean)[];
    requireSingleSelection?: boolean;
}
  • operator - Untuk filter dasar, operator dapat menjadi salah satu hal berikut:

    type BasicFilterOperators = "In" | "NotIn" | "All"
    
  • values - Array nilai untuk filter, semua nilai harus memiliki jenis yang sama.

  • requireSingleSelection - Menentukan apakah dimungkinkan untuk memilih beberapa nilai pada filter. Jika diatur ke true, hanya satu nilai yang dapat dipilih.

Contohnya:

const basicFilter = {
  $schema: "http://powerbi.com/product/schema#basic",
  target: {
    table: "Store",
    column: "Count"
  },
  operator: "In",
  values: [1, 2, 3, 4],
  filterType: models.FilterType.BasicFilter,
  requireSingleSelection: true
}

Filter tingkat lanjut

Filter tingkat lanjut memiliki operator logis tunggal dan satu atau dua kondisi yang memiliki operator dan nilainya sendiri.

interface IAdvancedFilter extends IFilter {
    logicalOperator: AdvancedFilterLogicalOperators;
    conditions: IAdvancedFilterCondition[];
}
  • logicalOperator - Operator logis dapat berupa salah satu hal berikut:

    type AdvancedFilterLogicalOperators = "And" | "Or";
    
  • conditions - Array kondisi untuk filter tingkat lanjut, setiap kondisi memiliki operator dan value.

    interface IAdvancedFilterCondition {
        value?: (string | number | boolean | Date);
        operator: AdvancedFilterConditionOperators;
    }
    

    Operator yang tersedia untuk suatu kondisi adalah:

    type AdvancedFilterConditionOperators = "None" | "LessThan" | "LessThanOrEqual" | 
    "GreaterThan" | "GreaterThanOrEqual" | "Contains" | "DoesNotContain" | "StartsWith" | 
    "DoesNotStartWith" | "Is" | "IsNot" | "IsBlank" | "IsNotBlank";
    

Contohnya:

const advancedFilter = {
  $schema: "http://powerbi.com/product/schema#advanced",
  target: {
    table: "Store",
    column: "Name"
  },
  logicalOperator: "Or",
  conditions: [
    {
      operator: "Contains",
      value: "Wash"
    },
    {
      operator: "Contains",
      value: "Park"
    }
  ],
  filterType: models.FilterType.AdvancedFilter
}

Catatan

Jika Anda membuat AdvancedFilter dengan hanya satu kondisi, atur ke logicalOperator"And". Operator logis diabaikan saat diurai oleh Power BI karena hanya ada satu kondisi, dan ketika filter diserialisasikan, operator logika default adalah "And". Ini memastikan filter yang dikembalikan saat memanggil getFilters, cocok dengan filter yang diatur menggunakan setFilters.

Filter N teratas

Filter N teratas memiliki operator tunggal, penghitung item untuk jumlah item yang ditampilkan, dan urutan berdasarkan target.

interface ITopNFilter extends IFilter {
    operator: TopNFilterOperators;
    itemCount: number;
    orderBy: ITarget;
}

Contohnya:

const topNFilter = {
  $schema: "http://powerbi.com/product/schema#topN",
  target: {
    table: "Store",
    column: "name"
  },
  operator: "Top",
  itemCount: 5,
  orderBy: {
      table: "Product",
      measure: "Count of Product"
   },
  filterType: models.FilterType.TopN
};

Filter tanggal relatif dan waktu relatif

Filter tanggal relatif dan filter waktu relatif keduanya mewarisi dari IRelativeDateTimeFilter antarmuka:

interface IRelativeDateTimeFilter extends IFilter {
    operator: RelativeDateOperators;
    timeUnitsCount: number;
    timeUnitType: RelativeDateFilterTimeUnit;
}
  • operator - Operator untuk filter tanggal dan waktu relatif dapat menjadi salah satu dari berikut ini:

    enum RelativeDateOperators {
        InLast = 0,
        InThis = 1,
        InNext = 2,
    }
    
  • timeUnitsCount - Jumlah unit waktu.

  • timeUnitType - Mendefinisikan unit waktu yang digunakan filter.

    enum RelativeDateFilterTimeUnit {
        Days = 0,
        Weeks = 1,
        CalendarWeeks = 2,
        Months = 3,
        CalendarMonths = 4,
        Years = 5,
        CalendarYears = 6,
        Minutes = 7,
        Hours = 8
    }
    

    Tabel berikut mencantumkan waktu unit yang didukung oleh filter tanggal relatif dan waktu relatif.

    Unit waktu Tanggal relatif Waktu relatif
    Hari
    Minggu
    CalendarWeeks
    Bulan
    CalendarMonths
    Tahun
    CalendarYears
    Menit
    Jam
  • includeToday - Menerima nilai boolean yang menentukan apakah akan menyertakan hari ini dalam filter.

    interface IRelativeDateFilter extends IRelativeDateTimeFilter {
    includeToday: boolean;
    }
    

    Catatan

    includeToday hanya didukung oleh filter tanggal relatif.

Contoh filter tanggal relatif:

const relativeDateFilter = {
  $schema: "http://powerbi.com/product/schema#relativeDate",
  target: {
    table: "Sales",
    column: "OrderDate"
  },
  operator: models.RelativeDateOperators.InLast,
  timeUnitsCount: 30,
  timeUnitType: RelativeDateFilterTimeUnit.Days,
  includeToday: true,
  filterType: models.FilterType.RelativeDate
};

Contoh filter waktu relatif:

const relativeTimeFilter = {
  $schema: "http://powerbi.com/product/schema#relativeTime",
  target: {
    table: "Sales",
    column: "OrderDate"
  },
  operator: models.RelativeDateOperators.InLast,
  timeUnitsCount: 12,
  timeUnitType: models.RelativeDateFilterTimeUnit.Hours,
  filterType: models.FilterType.RelativeTime
};

FILTER API

Gunakan metode berikut untuk mendapatkan dan memperbarui filter yang diterapkan ke laporan:

Mendapatkan filter

Gunakan getFilters untuk mendapatkan semua filter untuk salah satu objek berikut:

  • Laporan
  • Halaman
  • Visual
getFilters(): Promise<IFilter[]>

Perbarui filter

Gunakan updateFilters untuk menambahkan, mengganti, atau menghapus filter pada objek (laporan, halaman, atau visual). Menerima operasi dan array filter opsional.

updateFilters(operation: models.FiltersOperations, filters?: models.IFilter[]): Promise<IHttpPostMessageResponse<void>>

Operasi filter

Saat memanggil updateFilters , Anda perlu meneruskan operasi filter yang ingin Anda preform. Operasi yang tersedia adalah:

  • RemoveAll - Menghapus semua filter pada tingkat filter.
  • ReplaceAll - Mengganti semua filter yang ada pada tingkat filter dengan filter yang diberikan.
  • Add - Menambahkan filter yang diberikan pada tingkat filter (selain filter yang ada).
  • Replace - Mengganti filter yang ada dengan filter tertentu hanya jika kedua filter berlaku untuk bidang data yang sama. Jika ada filter tertentu yang tidak menggantikan filter yang ada, filter tersebut akan ditambahkan.

Catatan

Saat memanggil API dengan RemoveAll, argumen filter harus undefined. Untuk operasi lainnya, operasi tersebut harus didefinisikan.

Tingkat filter

Memperbarui dan mendapatkan filter dapat dilakukan pada tiga tingkat. Filter pada tingkat yang berbeda bersifat independen, dan memperbarui filter pada satu tingkat, tidak akan mengubah tingkat lainnya. Misalnya, menghapus filter halaman, tidak menghapusnya dari halaman lain dalam laporan.

Tingkat yang didukung untuk filter adalah:

  • Laporan - Filter diterapkan ke semua halaman dalam laporan.
  • Halaman - Filter diterapkan ke halaman laporan saat ini.
  • Visual - Filter diterapkan ke visual tertentu.

Catatan

Hanya filter tingkat visual yang mendukung ITopNFilter jenis filter.

Filter tingkat laporan

Untuk mendapatkan atau memperbarui filter yang berlaku untuk semua halaman dalam laporan, panggil API yang relevan pada objek laporan. Contohnya:

Mendapatkan filter laporan

Menerapkan filter ke semua halaman.

let reportFilters = await report.getFilters();

Menambahkan filter baru ke filter laporan

Menambahkan filter baru, bersama filter yang ada, untuk semua halaman.

await report.updateFilters(models.FiltersOperations.Add, filtersArray);

Menghapus filter laporan

Hapus filter yang diterapkan ke semua halaman.

await report.updateFilters(models.FiltersOperations.RemoveAll);

Filter tingkat halaman

Untuk mendapatkan atau memperbarui filter tingkat halaman, lakukan hal berikut:

  1. Dapatkan objek halaman untuk halaman target. Untuk informasi selengkapnya, lihat Mendapatkan halaman dan visual.
  2. Pada objek halaman, panggil API yang relevan.

Mendapatkan filter halaman

Menerapkan filter ke halaman tertentu.

let reportFilters = await page.getFilters();

Ganti semua filter halaman

Mengganti semua filter yang ada yang diterapkan ke halaman tertentu, dengan sekumpulan filter baru.

await page.updateFilters(models.FiltersOperations.ReplaceAll, filtersArray);

Menghapus filter halaman

Menghapus filter yang diterapkan ke halaman tertentu.

await page.updateFilters(models.FiltersOperations.RemoveAll);

Filter tingkat visual

Untuk mendapatkan atau memperbarui filter tingkat visual, lakukan hal berikut:

  1. Dapatkan objek visual untuk visual target. Untuk informasi selengkapnya, lihat Mendapatkan halaman dan visual.
  2. Pada objek visual, panggil API yang relevan.

Mendapatkan filter visual

Menerapkan filter ke visual tertentu.

let reportFilters = await visual.getFilters();

Ganti filter visual dengan target yang sama

Mengganti filter visual tertentu. Jika filter ada dengan bidang data target yang sama dengan filter tertentu, filter tersebut digantikan oleh filter yang diberikan. Filter yang diberikan yang tidak cocok dengan filter yang ada ditambahkan.

await visual.updateFilters(models.FiltersOperations.Replace, filtersArray);

Menghapus filter visual

Menghapus filter yang diterapkan ke visual tertentu.

await visual.updateFilters(models.FiltersOperations.RemoveAll);

Batasan

  • Memiliki lebih dari dua kondisi saat membangun filter Tingkat Lanjut dapat menyebabkan perilaku yang tidak ditentukan.

  • IncludeExclude dan Tuple jenis filter tidak didukung.

  • Target filter tuple dan hierarki tidak didukung.

Langkah berikutnya