2011-03-03 47 views
12

Tôi đang cố gắng tìm tất cả các WorkItems được gán cho một người X trong 30 ngày qua.
Vấn đề lớn tôi gặp phải là "trong 30 ngày qua".Tìm WorkItems được gán cho X trong 30 ngày qua

Tôi đã nghĩ đến việc sử dụng từ khóa "bao giờ" hoặc "asof", nhưng không thể tìm thấy câu trả lời hay nào .. chẳng hạn như WHERE [Assigned To] = 'X' AND (([Assigned To] != 'X') asof '<30daysago>').
Nhưng đây vẫn chưa phải là giải pháp chống đạn.

Bất kỳ ý tưởng nào tốt hơn?

Cảm ơn & loại coi

Simon

Trả lời

13

Dường như điều này không thể chỉ sử dụng WIQL, nhưng bạn có thể nhận được gần gũi.

Từ khóa @Today sẽ cho bạn ngày hôm nay, sau đó chỉ trừ phạm vi của bạn khỏi ngày đó. Từ khóa EVER được áp dụng cho [Status]='AssignedTo' và so sánh với ngày 30 ngày trước đây trong [StateChangeDate] là những gì bạn cần để thực hiện việc này.

Như gần như bạn có thể nhận được với WIQL và các lĩnh vực hiện:
này nói, từ tất cả các phiên bản (tình trạng thay đổi) hồ sơ trở lại nơi người dùng 'X' đã từng AssignedTo và Nhà nước đã thay đổi trong cuối cùng 30 ngày. Điều này về cơ bản sẽ cung cấp cho bạn một hình ảnh hơi mờ về những gì Người dùng của bạn đã làm việc trong tháng trước.

WHERE [Microsoft.VSTS.Common.StateChangeDate] >= @today - 30 
    AND [System.AssignedTo] EVER 'Bennett Aaron' 
    ORDER BY [System.State] 

Thêm lĩnh vực còn thiếu:
Bạn có thể thêm một lĩnh vực tùy chỉnh được gọi AssignedDate đó là lấy được qua các New-> chuyển workflow AssignedTo mà bạn tạo ra trong Work Item Definition XML. Bạn có thể thực hiện việc này bằng cách sử dụng phần mở rộng Team Foundation Server Power Tools cho Visual Studio. Điều này sẽ cung cấp cho bạn chính xác những gì bạn cần cũng như các tùy chọn báo cáo bổ sung trong tương lai.

TFS API
Tôi không thể giúp bạn với điều này, nhưng tôi tin rằng bạn có thể truy vấn bằng API TFS.



Một vài gotchas nhanh chóng tôi đã có kinh nghiệm để giúp bạn tiết kiệm thời gian trên ASOF và EVER:

AsOf sẽ không giúp bạn bằng cách riêng của mình với điều này vì nó không hỗ trợ một loạt các ngày. Nó cho phép bạn truy vấn như thể nó là một ngày khác. Nói cách khác, nếu bạn quên chụp kết quả của một truy vấn ngày hôm qua, bạn có thể sử dụng truy vấn AsOf để nhận được kết quả mà bạn đã có được nó chạy ngày hôm qua. Điều tôi hiểu là bạn muốn truy vấn phạm vi ngày cơ bản.

EVER có thể không hoạt động như bạn mong đợi so với ngày vì tôi cho rằng nó sử dụng giá trị chính xác của trường (phần dấu thời gian của trường ngày sẽ được bao gồm). Chỉ cần đảm bảo từ khóa EVER được sử dụng trong trường trạng thái chứ không phải ngày tháng.

+0

Cảm ơn rất nhiều. Tôi hy vọng nó sẽ có thể truy vấn lịch sử bằng cách nào đó. Một lĩnh vực phụ là quá nhiều, nó sẽ chỉ là một "tốt đẹp để có" tính năng cho chương trình của tôi. Có thể nó có thể được sử dụng một cái gì đó như thế này, nhưng tôi đoán nó chỉ là tổng số quá mức cần thiết :) '(([gán cho]! = 'X') asof '<30daysago>') AND (([gán cho]! = ' X ') asof' <29daysago> ') ... ' –

+0

Xin lỗi về điều đó, đã đi ăn trưa trước khi tôi có thể cập nhật điều này! Chỉ cần thêm câu trả lời của bạn. Tôi đã làm một số thử nghiệm chống lại mệnh đề EVER có thể làm việc cho bạn. Tôi không có nhiều dữ liệu để kiểm tra, vì vậy tôi rất muốn biết tiêu chí tôi trả về cho bạn –

+0

Không sao cả! Thật không may tôi nhận được tất cả các WorkItems đã được thay đổi trong 30 ngày qua và đã từng được giao cho tôi. Vì vậy, tôi đã thử 2 truy vấn khác thậm chí không phân tích cú pháp ... Tôi không thể sử dụng NOT và EVER kết hợp, không thể sử dụng ASOF cho một satement đơn và không thể sử dụng [System.ChangedDate] trong mệnh đề đầu tiên 'WHERE ([ Được gán cho] = 'X') VÀ [System.ChangedDate]> = @ Today-2 AND NOT ([Đã gán cho] EVER 'X') "' và thứ hai 'WHERE ([Đã gán cho] = 'X') VÀ [ System.ChangedDate]> = @ Hôm nay-2 VÀ ([Đã gán cho]! = 'X' ASOF [System.ChangedDate]) ' Dường như không thể thực hiện điều này với WIQL –

Các vấn đề liên quan