リンクされた作業項目のサンプル クエリとレポートを一覧表示する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
この記事では、他の作業項目にリンクされている作業項目を一覧表示するレポートを作成する方法について説明します。 たとえば、次のレポートは、親子リンクの種類を持つユーザー ストーリーにリンクされている機能の一覧を示しています。
リンクの種類と作業項目のリンクの詳細については、「 ユーザー ストーリー、問題、バグ、およびその他の作業項目をリンクする」を参照してください。
その他のサンプル クエリには、別のバグへの重複リンクを含むバグの一覧表示や、別のバグへの重複リンクを含まないバグの一覧が含まれます。
Note
この記事では、 OData クエリを使用したサンプル レポートの概要 Power BI の基本的な理解があることを前提としています。
前提条件
- Access:少なくとも Basic アクセス権を持つプロジェクトのメンバーである必要があります。
- Permissions: 既定では、プロジェクト メンバーには Analytics にクエリを実行してビューを作成する権限があります。
- サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「 Analytics にアクセスするためのアクセス許可と前提条件を参照してください。
サンプル クエリ
リンクされた作業項目をフィルター処理する方法を示すクエリがいくつか用意されています。 これらのクエリはすべて、現在のデータを返す WorkItems
エンティティ セットを指定します。
Note
フィルターまたはレポートの目的で使用できるプロパティを確認するには、「Azure Boardsのメタデータ リファレンス」を参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のProperty
下EntityType
NavigationPropertyBinding Path
の値のいずれかを使用してプロパティをEntitySet
返したりできます。 各 は EntitySet
に EntityType
対応します。 各値のデータ型の詳細については、対応する EntityType
に指定されたメタデータを確認してください。
機能とその子ユーザー ストーリーを返す
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
&"$filter=WorkItemType eq 'Feature' "
&"and State ne 'Closed' and State ne 'Removed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"&$select=WorkItemId,Title,WorkItemType,State,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Child' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
置換文字列とクエリの内訳
次の文字列を実際の値に置き換えます。 置換に角かっこを {} 含めないでください。 たとえば、組織名が "Fabrikam" の場合は、 ではなく {Fabrikam}
を にFabrikam
置き換えます{organization}
。
{organization}
- 組織名{project}
- プロジェクト間クエリの場合は、チーム プロジェクト名を指定するか、"/{project}" を完全に省略します{areapath}
- エリア パス。 形式の例:Project\Level1\Level2
。
クエリの内訳
次の表では、クエリの各部分について説明します。
クエリ パーツ
説明
$filter=WorkItemType eq 'Feature'
ユーザー ストーリーを返します。
and State ne 'Closed' and State ne 'Removed'
State が Closed または Removed に設定されているフィーチャーを省略します。
and startswith(Area/AreaPath,'{areapath}')
特定のエリア パスの下にフィーチャーのみを含める'{areapath}'
を置き換えます。
チーム名でフィルター処理するには、filter ステートメント Teams/any(x:x/TeamName eq '{teamname})'
を使用します。
&$select=WorkItemId,Title,WorkItemType,State,AreaSK
返すフィールドを選択します。
&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),
AssignedTo
、Iteration
、およびArea
エンティティの展開に使用するフィールドを指定します。
Links(
Links
エンティティを展開します。
$filter=LinkTypeName eq 'Child'
リンクされた作業項目をフィルター処理して、 Child リンクの種類を持つアイテムのみに絞り込みます。 その他の例としては、 Parent、 Child、 Duplicate、 Duplicate Of、 Affects、 Affected By があります。
and TargetWorkItem/WorkItemType eq 'User Story';
リンクされたユーザー ストーリーのみを含めます。
$select=LinkTypeName;
返す LinkTypeName
プロパティを選択します。
$expand=TargetWorkItem($select=WorkItemType, WorkItemId, Title, State)
返すリンクされた作業項目のプロパティを選択します。
)
Links()
句を閉じます。
関連リンクの種類でリンクされたユーザー ストーリーを返す
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 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 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"&$select=WorkItemId,Title,WorkItemType,State,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Related' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Teams でフィルター処理されたリンクされたユーザー ストーリーを返す
次のクエリは、エリア パスではなくチーム名でフィルター処理される点を除き、この記事で前に使用したクエリと同じです。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 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 'Closed' "
&"and (Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Related' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
別のバグへの重複リンクを使用してバグを返す
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
&"$filter=WorkItemType eq 'Bug' "
&"and State ne 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"and Links/any(x:x/LinkTypeName eq 'Duplicate' and x/TargetWorkItem/WorkItemType eq 'Bug') "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Duplicate' "
&"and TargetWorkItem/WorkItemType eq 'Bug'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
別のバグへの重複リンクがないバグを返す
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
&"$filter=WorkItemType eq 'Bug' "
&"and State ne 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"and not (Links/any(x:x/LinkTypeName eq 'Duplicate' and x/TargetWorkItem/WorkItemType eq 'Bug')) "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
(省略可能)クエリの名前を変更する
既定のクエリ ラベル Query1 の名前を、より意味のある名前に変更できます。 [ クエリ設定] ペインから新しい名前を入力するだけです。
Power Query エディターでデータを変換する
レポートを作成する前に、複数のフィールドを含むレコードを返す列を展開する必要があります。 この例では、次のレコードを展開します。
Links
Links.TargetWorkItem
Area
Iteration
AssignedTo
作業項目を展開する方法については、「 Analytics データを変換して Power BI レポートを生成する」を参照してください。
(省略可能)フィールドの名前を変更する
列を展開したら、1 つ以上のフィールドの名前を変更できます。 たとえば、列 AreaPath
の名前を Area Path
に変更できます。 データ テーブル ビューで名前を変更することも、後でレポートを作成するときに名前を変更することもできます。 方法については、「 Rename 列フィールドを参照してください。
この例では、次のフィールドの名前が変更されています。
元のフィールド名 | 名前の変更 |
---|---|
Links.TargetWorkItem.ID | ターゲット ID |
LinksLinkTypeName | リンクの種類 |
Links.TargetWorkItem.State | ターゲットの状態 |
Links.TargetWorkItem.Title | ターゲット タイトル |
クエリを閉じて変更を適用する
すべてのデータ変換が完了したら、Home メニューから Close & Apply を選択してクエリを保存し、Power BI の Report タブに戻ります。
リンクされた作業項目を一覧表示するテーブル レポートを作成する
Power BI で、Visualizations で Table レポートを選択します。
次のフィールドを、 Columns に示されている順序で追加します。
- IDを右クリックして 集計しないを選択します。
- State
- Title
- ターゲット ID右クリックして 集計しない] を選択します。
- リンクの種類
- ターゲットの状態
- ターゲット タイトル
レポートの例が表示されます。