Bagikan melalui


Menjumlahkan nilai item kerja turunan ke laporan contoh induk

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Rollup menyediakan dukungan untuk menampilkan jumlah item kerja atau jumlah Titik Cerita, Sisa Pekerjaan, atau bidang kustom item turunan lainnya. Artikel ini menyediakan beberapa contoh cara membuat laporan rollup tabular untuk Epik, Fitur, atau Cerita Pengguna yang berisi item kerja anak. Gambar berikut menunjukkan contoh Poin Cerita yang diagregasikan untuk Fitur Utamanya.

Cuplikan layar laporan matriks rollup fitur.

Untuk informasi selengkapnya tentang rollup dan opsi untuk menampilkan rollup, lihat Menampilkan kemajuan rollup atau total di Azure Boards.

Catatan

Artikel ini mengasumsikan Anda telah membaca Gambaran Umum Laporan Sampel menggunakan Kueri OData dan memiliki pemahaman yang dasar tentang Power BI.

Kategori Persyaratan
Tingkat-tingkat akses - Anggota proyek.
- Setidaknya akses Dasar .
Izin Secara default, anggota proyek memiliki izin untuk mengkueri Analytics dan membuat tampilan. Untuk informasi selengkapnya tentang prasyarat lain mengenai pengaktifan layanan dan fitur serta aktivitas pelacakan data umum, lihat Izin dan prasyarat untuk mengakses Analitik.

Contoh kueri

Kueri berikut mengembalikan data dari entitas yang WorkItems diatur untuk mendukung pembuatan laporan matriks rollup.

Catatan

Untuk menentukan properti yang tersedia untuk tujuan filter atau laporan, lihat Referensi metadata untuk Azure Boards. Anda dapat memfilter kueri atau mengembalikan properti menggunakan salah satu nilai di Property bawah nilai atau EntityType yang NavigationPropertyBinding Path tersedia dengan EntitySet. Masing-masing EntitySet sesuai dengan EntityType. Untuk informasi selengkapnya tentang jenis data dari setiap nilai, tinjau metadata yang disediakan untuk yang sesuai EntityType.

Rollup Story Menunjuk ke Fitur Cerita Pengguna anak berdasarkan Jalur Area

Copy dan paste kueri Power BI berikut ini langsung ke jendela Get DataBlank Query. Untuk informasi selengkapnya, lihat Ikhtisar laporan sampel menggunakan kueri OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Cut'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

String substitusi dan perincian kueri

Ganti string berikut dengan nilai Anda. Jangan sertakan {} tanda kurung dengan pengganti Anda. Misalnya jika nama organisasi Anda adalah "Fabrikam", ganti {organization} dengan Fabrikam, bukan {Fabrikam}.

  • {organization} - Nama organisasi Anda
  • {project} - Nama proyek tim Anda, atau hilangkan "/{project}" sepenuhnya, untuk kueri lintas proyek
  • {areapath} - Jalur Area Anda. Contoh format: Project\Level1\Level2.

Perincian kueri

Tabel berikut ini menjelaskan setiap bagian kueri.

Bagian kueri

Keterangan

$filter=WorkItemType eq 'Feature'

Pemulihan Fitur

and State ne 'Cut'

Hilangkan bug tertutup.

and startswith(Area/AreaPath,'{areapath}')

Mengembalikan item kerja di bawah Jalur Area tertentu, menggantikan Area/AreaPath eq '{areapath}' untuk mengembalikan item di Jalur Area tertentu. Untuk memfilter menurut Nama Tim, gunakan pernyataan Teams/any(x:x/TeamName eq '{teamname})'filter .

and Descendants/any()

Sertakan semua Fitur, bahkan fitur tanpa Cerita Pengguna. Ganti dengan "any(d:d/WorkItemType eq 'Cerita Pengguna')" untuk menghilangkan Fitur yang tidak memiliki Cerita Pengguna anak.

&$select=WorkItemId, Title, WorkItemType, State

Pilih bidang yang akan dikembalikan.

&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),

Pilih bidang properti AssignedTo, Iteration, Area yang dapat diperluas.

Descendants(

Perluas klausul Descendants

$apply=filter(WorkItemType eq 'User Story')

Filter turunan untuk hanya menyertakan Cerita Pengguna (menghilangkan tugas dan bug).

/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)

Untuk semua turunan yang cocok dengan klausa filter, hitung, dan jumlahkan StoryPoints properti.

)

Tutup Descendants().

Rollup Story Menunjuk ke Fitur Cerita Pengguna anak berdasarkan Teams

Kueri berikut menunjukkan cara menghasilkan laporan rollup dengan memfilter berdasarkan nama tim, bukan Jalur Area.

Salin dan tempel kueri berikut ini secara langsung ke jendela Dapatkan Data> Power BI. Untuk informasi selengkapnya, lihat Gambaran umum laporan sampel dengan kueri OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Cut'"
            &" and (Teams/any(x:x/TeamName eq '{teamname}') or Teams/any(x:x/TeamName eq '{teamname}') or Teams/any(x:x/TeamName eq '{teamname}'))"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Rollup Story Points ke Epik

Anda dapat menghitung poin cerita ke Epic dengan kueri berikut.

Salin dan tempel kueri Power BI berikut ini langsung ke jendela Dapatkan Data>Kueri Kosong. Untuk informasi selengkapnya, lihat Gambaran umum laporan sampel menggunakan kueri OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Epic'"
            &" and State ne 'Cut'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any(d:d/WorkItemType eq 'User Story')"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate(StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Pekerjaan yang Tersisa dan Pekerjaan yang Selesai untuk User Stories

Kueri berikut ini memperlihatkan cara meringkas Sisa Pekerjaan dan Pekerjaan yang Telah Selesai yang ditetapkan pada Tugas-tugas bawahan ke Cerita Pengguna dalam hierarki. Kueri ini mengasumsikan bahwa Tugas ditugaskan sebagai bagian dari Cerita Pengguna di Jalur Area yang ditentukan.

Salin dan tempel kueri Power BI berikut ini langsung ke jendela Dapatkan Data>Kueri Kosong. Untuk informasi selengkapnya, lihat Gambaran umum laporan sampel menggunakan kueri OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'User Story'"
            &" and State ne 'Removed'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'Task')"
                &"/aggregate(RemainingWork with sum as TotalRemainingWork, CompletedWork with sum as TotalCompletedWork)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Menjumlahkan Jumlah Bug ke Fitur

Kueri berikut menunjukkan cara menggulung jumlah Bug yang ditetapkan ke Fitur. Kueri ini mengasumsikan bahwa Bug didefinisikan sebagai anak dari Fitur di Jalur Area yang ditentukan.

Salin dan tempel kueri Power BI berikut ini langsung ke jendela Dapatkan Kueri Kosong Data>. Untuk informasi selengkapnya, lihat Gambaran umum laporan sampel menggunakan kueri OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Removed'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'Bug')"
                &"/aggregate($count as CountOfBugs)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

(Opsional) Mengganti nama kueri

Anda bisa mengganti nama label kueri default, Query1, menjadi sesuatu yang lebih bermakna. Cukup masukkan nama baru dari panel Pengaturan Kueri.

Cuplikan layar opsi menu kueri Power BI, ganti nama kueri.

Memperluas kolom di Power BI

Klausa &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) mengembalikan rekaman yang berisi beberapa bidang. Sebelum membuat laporan, Anda perlu memperluas catatan untuk meratakannya ke bidang tertentu. Dalam hal ini, Anda mungkin ingin memperluas rekaman berikut:

  • AssignedTo
  • AreaPath
  • IterationPath

Untuk mempelajari caranya, lihat Mengubah data Analitik untuk menghasilkan laporan Power BI.

(Opsional) Ganti nama bidang

Setelah memperluas kolom, Anda mungkin ingin mengganti nama satu atau beberapa bidang. Misalnya, Anda dapat mengganti nama kolom AreaPath menjadi Area Path. Untuk mempelajari caranya, lihat Mengganti nama bidang kolom.

Mengganti nilai null dalam bidang rollup

Jika item kerja tidak memiliki anak, nilai rollup mungkin null. Misalnya, Descendants.CountOfUserStories adalah "null" jika Fitur tidak memiliki Cerita Pengguna anak.

Untuk pelaporan yang lebih mudah, ganti semua null dengan nol dengan mengikuti langkah-langkah ini.

  1. Pilih kolom dengan mengklik header kolom.
  2. Pilih menu Transformasi .
  3. Pilih Ganti Nilai. Dialog Ganti Nilai muncul.
  4. Masukkan "null" di Nilai untuk Ditemukan.
  5. Masukkan "0" di Ganti Dengan.
  6. Pilih OK.

Ulangi untuk semua kolom rollup.

Tutup kueri dan terapkan perubahan Anda

Setelah Anda menyelesaikan semua transformasi data, pilih Tutup & Terapkan dari menu Beranda untuk menyimpan kueri dan kembali ke tab Laporan di Power BI.

Cuplikan layar opsi Editor Power Query Tutup dan Terapkan.

Membuat Laporan Tabel

  1. Di Power BI, pilih laporan Tabel di bawah Visualisasi.

    Cuplikan layar pilihan Visualisasi dan Bidang Power BI untuk laporan tabel Rollup.

  2. Tambahkan bidang berikut ke Kolom dalam urutan yang ditunjukkan:

    • WorkItemI, pilih Jangan ringkas untuk menampilkan ID jika diperlukan
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Contoh laporan ditampilkan.

Cuplikan layar laporan matriks rollup Fitur Sampel.