Bagikan melalui


Menjumlahkan nilai item kerja turunan ke laporan contoh induk

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

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 Display rollup progress or totals in Azure Boards.

Catatan

Artikel ini mengasumsikan Anda membaca Tampilan laporan sampel menggunakan kueri OData dan memiliki pemahaman dasar tentang Power BI.

Kategori Persyaratan
Tingkat-tingkat akses - Anggota Project.
- 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 menemukan properti yang tersedia untuk pemfilteran atau pelaporan, lihat referensi Metadata untuk Azure Boards. Anda dapat memfilter kueri atau mengembalikan properti dengan menggunakan nilai apa pun yang ditentukan di bawah Property, atau nilai apa pun yang tercantum untuk NavigationPropertyBinding Path pada EntitySet. Setiap EntitySet dipetakan ke EntityType, yang mendokumentasikan jenis data untuk setiap properti.

Rollup Story Menunjuk ke Fitur Cerita Pengguna anak berdasarkan Jalur Area

Salin dan tempel kueri Power BI berikut langsung ke Dapatkan Data>Kueri Simpul jendela. 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 mencantumkan kurung kurawal {} dalam penggantian 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 Power BI berikut langsung ke Dapatkan Data>Kueri Simpul jendela. 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 (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 langsung ke Dapatkan Data>Kueri Simpul jendela. 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 '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 langsung ke Dapatkan Data>Kueri Simpul jendela. 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 '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 langsung ke Dapatkan Data>Kueri Simpul jendela. 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 '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. Masukkan nama baru pada panel Pengaturan Kueri.

Screenshot opsi menu kueri Power BI, ganti nama kueri.

Perluas 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 data Transform Analytics untuk menghasilkan laporan Power BI.

(Opsional) Mengganti nama bidang kolom

Anda dapat mengganti nama bidang kolom agar lebih ramah pengguna. 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 memilih header kolom.
  2. Pilih menu Transformasi .
  3. Pilih Ganti Nilai. Dialog Ganti Nilai muncul.
  4. Biarkan Nilai yang Dicari tetap null.
  5. Masukkan 0 di Ganti Dengan.
  6. Pilih OK.

Ulangi untuk semua kolom rollup.

Tutup kueri dan terapkan perubahan Anda

Saat Anda menyelesaikan semua transformasi data, pilih Tutup & Terapkan dari menu Beranda . Tindakan ini menyimpan kueri dan mengembalikan Anda ke tab Report di Power BI.

Cuplikan layar dari opsi Tutup dan Terapkan di Editor Power Query.

Membuat Laporan Tabel

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

    Screenshot 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.