Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
この記事では、他の作業項目にリンクされている作業項目を一覧表示するレポートを作成する方法について説明します。 たとえば、次のレポートは、親子リンクの種類を持つユーザー ストーリーにリンクされている機能の一覧を示しています。
リンクの種類と作業項目のリンクの詳細については、「 ユーザー ストーリー、問題、バグ、およびその他の作業項目をリンクする」を参照してください。
その他のサンプル クエリには、別のバグへの重複リンクを含むバグの一覧表示や、別のバグへの重複リンクを含まないバグの一覧が含まれます。
Note
この記事では、 OData クエリを使用したサンプル レポートの概要 Power BI の基本的な理解があることを前提としています。
| カテゴリ | Requirements |
|---|---|
| アクセス レベル |
-
プロジェクト メンバー。 - 少なくとも Basic アクセス。 |
| アクセス許可 | 既定では、プロジェクト メンバーには Analytics にクエリを実行してビューを作成する権限があります。 サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「 Analytics にアクセスするためのアクセス許可と前提条件を参照してください。 |
サンプル クエリ
リンクされた作業項目をフィルター処理する方法を示すクエリがいくつか用意されています。 これらのクエリはすべて、現在のデータを返す WorkItems エンティティ セットを指定します。
Note
フィルターまたはレポートの目的で使用できるプロパティを確認するには、「Azure Boardsのメタデータ リファレンス」を参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のProperty下EntityTypeNavigationPropertyBinding 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" の場合は、 ではなく {organization}を にFabrikam置き換えます{Fabrikam}。
-
{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 エディターでデータを変換する
レポートを作成する前に、複数のフィールドを含むレコードを返す列を展開する必要があります。 この例では、次のレコードを展開します。
LinksLinks.TargetWorkItemAreaIterationAssignedTo
作業項目を展開する方法については、「 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右クリックして 集計しない] を選択します。
- リンクの種類
- ターゲットの状態
- ターゲット タイトル
レポートの例が表示されます。