Tạo các báo cáo tuỳ chỉnh với BIRT và Rational Team Concert, Phần 3: Các kỹ thuật tạo báo cáo nâng cao

IBM® Rational Team Concert™ có thể giúp các nhóm phát triển phần mềm lưu trữ và tổ chức một khối lượng thông tin to lớn, bao gồm các kế hoạch và các nhiệm vụ công tác, các việc xây dựng và các việc thử nghiệm phần mềm, các tệp mã nguồn và các tệp khác. Bài viết này trình bày cách hiển thị trực quan các thông tin đó với các báo cáo tùy chỉnh bằng cách sử dụng Rational Team Concert với BIRT (Business Information and Reporting Tools – Các công cụ tạo báo cáo và thông tin nghiệp vụ) của Eclipse. Bài viết này xây dựng trên hai bài viết trước của loạt bài này cho thấy cách lấy ra thông tin phức tạp từ kho lưu trữ như thế nào.

Tim McMackin, Kỹ sư phần mềm, IBM

Author photoTim McMackin là tác giả viết về kỹ thuật cho phần mềm Rational của IBM tại Raleigh, Bắc Carolina. Ông có kinh nghiệm viết giới thiệu các sản phẩm kỹ thuật và đã làm cho IBM từ năm 2004.



12 01 2012

Giới thiệu về bài viết này

IBM® Rational Team Concert™ có thể giúp các nhóm phát triển phần mềm lưu trữ và tổ chức một khối lượng thông tin to lớn, bao gồm các kế hoạch và các nhiệm vụ công tác, các việc xây dựng và các việc thử nghiệm phần mềm, các tệp mã nguồn và cả các tệp khác. Với bất kỳ kho lưu trữ nào có kích thước lớn như vậy, việc hiển thị trực quan trở thành một vấn đề. Làm thế nào để bạn có được một khung nhìn mức cao về trạng thái của các dự án mà Rational Team Concert đang theo dõi? Các bảng điều khiển và các truy vấn mục công việc cung cấp các cách để xem thông tin này, nhưng để có một khung nhìn tùy chỉnh hơn, Rational Team Concert hỗ trợ các báo cáo BIRT của Eclipse tùy chỉnh được nạp trực tiếp vào một máy khách Web.

Các mục tiêu

Hướng dẫn này trình bày các chủ đề sau:

  • Tùy chỉnh báo cáo với các tham số.
  • Sử dụng logic phức tạp bằng cách áp dụng mã JavaScript cho các tập dữ liệu.
  • Đếm các mục công việc đáp ứng tiêu chí cụ thể.
  • Lấy ra dữ liệu lịch sử từ kho lưu trữ Rational Team Concert.
  • Hiểu được các sự khác biệt về hành vi giữa các bảng dữ liệu sống và dữ liệu lịch sử.
  • Sử dụng dữ liệu từ các vùng khác nhau của kho lưu trữ Rational Team Concert.
  • Liên kết từ các báo cáo đến các mục công việc có liên quan.

Các điều kiện cần trước

Loạt bài này giả định rằng bạn đã làm quen cơ bản với các báo cáo trong Rational Team Concert, được trình bày trong Phần 1 và Phần 2. Nếu bạn chưa quen thuộc với các báo cáo trong Rational Team Concert và BIRT, hãy tìm hiểu qua các bài viết trước.

Để làm theo bài viết này, bạn cần một tài khoản miễn phí trên trang Jazz.net và các phiên bản đầy đủ hoặc dùng thử của máy chủ Rational Team Concert và máy khách Rational Team Concert. Nếu bạn không có máy chủ và máy khách, Phần 1 mô tả cách nhận được một phiên bản dùng thử của máy chủ Rational Team Concert và một phiên bản miễn phí của máy khách Rational Team Concert.


Lọc báo cáo với các tham số

Trong bài viết trước (Phần 2), bạn đã thấy cách chuyển một tham số vào một bảng đơn lẻ trong báo cáo. Bạn cũng có thể thiết lập các tham số chung cho toàn bộ báo cáo và sử dụng các tham số đó trong bao nhiêu tập dữ liệu tùy ý bạn. Ví dụ, bạn có thể cần lọc các vùng nhóm làm việc để chỉ hiển thị các vùng mà bạn quan tâm. Trong trường hợp này, bạn tạo ra một tập dữ liệu mới để biểu thị tất cả các các vùng nhóm để chọn từ đó và sau đó bạn trưng ra tập dữ liệu đó cho người dùng báo cáo dưới dạng một hộp danh sách. Sau đó, bạn có thể giới hạn các tập dữ liệu khác chỉ lấy các vùng nhóm mà người dùng báo cáo lựa chọn trong hộp danh sách.

  1. Tạo một tập dữ liệu có tên là Team area từ bảng TEAM_AREA của nguồn dữ liệu chung.
  2. Chọn cột TEAM_AREA_NAME và cột TEAM_AREA_ITEMID làm đầu ra và TEAM_AREA_ARCHIVED làm tham số.
Hình 1. Tạo một tập dữ liệu của các vùng nhóm
Cửa sổ Jazz Data Set mới
  1. Thiết lập các tham số đã lưu trữ là false (sai) để chỉ bao gồm các vùng nhóm đang hoạt động vào tập dữ liệu này.
  2. Tạo một tham số cho báo cáo bằng cách sử dụng tập dữ liệu đó làm các giá trị có thể:
    1. Trong khung nhìn Data Explorer, nhấn chuột phải vào Report Parameters (Các tham số báo cáo), rồi nhấn vào New Parameter (Tham số mới).
    2. Trong cửa sổ Edit Parameter (Chỉnh sửa tham số), đặt tên tham số Selected team areas (Các vùng nhóm được chọn).
    3. Trong trường Prompt Text (Lời nhắc), gõ Team areas.
    4. Trong danh sách Data type (Kiểu dữ liệu), chọn String (Chuỗi).
    5. Trong danh sách Display type (Kiểu hiển thị), chọn List Box (Hộp danh sách).
    6. Trong Display As (Hiển thị như), xóa dấu chọn hộp kiểm Hidden (Ẩn) và đánh dấu chọn hộp kiểm Is Required (bắt buộc phải có).
    7. Trong List of values (Danh sách các giá trị), nhấn Dynamic. Tùy chọn này cho phép bạn sử dụng tập dữ liệu làm các giá trị, chứ không phải gõ nhập tất cả chúng bằng tay.
    8. Xóa dấu chọn hộp kiểm Allow Multiple Values (Cho phép nhiều giá trị). Rational Team Concert không nhận ra hộp kiểm này, Rational Team Concert cho phép nhiều giá trị cho các tham số được hiển thị như một hộp danh sách và các giá trị duy nhất cho các tham số được hiển thị như một hộp kết hợp.
    9. Trong danh sách Data set (Tập dữ liệu), chọn tập dữ liệu Team area options (Các tùy chọn vùng nhóm).
    10. Trong danh sách Select value column (Chọn cột giá trị), chọn TEAM_AREA_ITEMID. Cột này là một mã định danh duy nhất cho vùng nhóm.
    11. Trong danh sách Select display text (Chọn văn bản hiển thị), chọn TEAM_AREA_NAME. Cột này là tên của vùng nhóm, được sử dụng làm nhãn của tham số.
    12. Trong danh sách Sort by (Sắp xếp theo), chọn TEAM_AREA_NAME.
    13. Nhấn OK.
Hình 2. Tạo một tham số
Cửa sổ hộp thoại Edit Parameter

Nếu bạn tải báo cáo này lên máy chủ và chạy nó, bạn sẽ thấy một hộp danh sách cho phép bạn chọn một hoặc nhiều vùng nhóm. Bạn có thể chọn các vùng nhóm mà bạn quan tâm rồi nhấn vào Run (Chạy), nhưng vì tham số này vẫn chưa bị kết buộc tới bất cứ thứ gì, nên các tham số chưa hạn chế các tập dữ liệu.

Hình 3. Chỉ định các giá trị tham số cho báo cáo trong thời gian chạy
Khung nhìn My Work Items
  1. Kết buộc tham số với tập dữ liệu của các vùng nhóm:
    1. Trong khung nhìn Data Explorer, nhấn đúp vào tập dữ liệu Users (Những người dùng).
    2. Trên thẻ Fact Information (Thông tin thực tế) của trình soạn thảo tập dữ liệu, thêm cột TEAM_AREA_ITEMID làm tham số cho tập dữ liệu. Trên thẻ Parameters của trình soạn thảo tập dữ liệu, chọn tham số TEAM_AREA_ITEMID và sau đó nhấn Edit.
    3. Trong cửa sổ Edit Parameter (Chỉnh sửa tham số), trong danh sách Linked To Report Parameter (Liên kết đến tham số báo cáo), chọn tham số Selected team areas (Các vùng nhóm được chọn).
Hình 4. Kết buộc tập dữ liệu với tham số
Cửa sổ Edit Parameter trong khung nhìn Edit Data Set–Users
  1. Nhấn OK để lưu và đóng tập dữ liệu.

Bây giờ, khi bạn tải báo cáo này lên máy chủ, chọn một vùng nhóm cho tham số và chạy báo cáo, bạn sẽ thấy một danh sách chỉ có những người dùng gắn với vùng nhóm đã chọn. Tập dữ liệu của các mục công việc vẫn hiển thị tất cả các mục công việc gắn với mỗi người dùng, bất kể vùng nhóm của các mục công việc. Nếu bạn muốn, bạn cũng có thể lọc mục công việc theo tham số của vùng nhóm.

Theo cách này, các tham số cho phép bạn giới hạn các báo cáo ở một kích thước có thể quản lý được, vì việc làm giảm số lượng dữ liệu được hiển thị trên báo cáo làm cho nó chạy nhanh hơn và hiển thị thông tin ngắn gọn hơn.

Các tham số cũng cho phép bạn tùy chỉnh các báo cáo cho những người nhận cụ thể. Khi bạn nhấn chuột vào nút Edit trong Rational Team Concert và thiết lập các tham số cho báo cáo, bạn có thể nhấn Save Copy để lưu lại một bản sao mới của báo cáo. Bản sao mới này sử dụng cùng một khuôn mẫu báo cáo nhưng với các tham số khác và bản sao này sẽ được cập nhật tự động nếu bạn tải lên một tệp thiết kế báo cáo mới.


Các kỹ thuật khác để tham khảo chéo dữ liệu

Kỹ thuật tập dữ liệu lồng nhau được mô tả trong phần 2 thường đã đủ để hiển thị dữ liệu phức tạp trên một báo cáo Rational Team Concert. Tuy nhiên, có các kỹ thuật khác để liên kết một tập dữ liệu này với tập dữ liệu khác.

Các biến trong kịch bản lệnh

Bạn có thể tạo ra một đối tượng JavaScript chung để lưu trữ một bảng và sau đó sử dụng đối tượng này mỗi khi bạn cần truy cập dữ liệu. Phương thức này có thể thuận tiện hơn cho dữ liệu duy trì không đổi trên toàn bộ báo cáo, hoặc dữ liệu mà bạn muốn tham khảo thường xuyên, vì bạn không phải lồng một tập dữ liệu mỗi khi bạn muốn sử dụng nó.

Ví dụ, các ưu tiên và các mức nghiêm trọng của các mục công việc được lưu trữ trong bảng ENUMERATIONS (Các kiểu liệt kê). Bảng này cũng chứa bất kỳ kiểu liệt kê tùy chỉnh nào mà bạn tạo ra, ví dụ như khi bạn thêm một thuộc tính tùy chỉnh cho một mục công việc. Nếu bạn tạo ra một tập dữ liệu đơn giản dựa vào bảng ENUMERATIONS và chuyển cho nó ID của kiểu liệt kê và ID của vùng dự án, thì các kết quả sẽ giống như trong Liệt kê 1.

Liệt kê 1. Kiểu liệt kê mức nghiêm trọng
ENUMERATION_ID  LITERAL_ID  LITERAL_NAME	
severity        1           Unclassified	
severity        2           Minor	
severity        3           Normal	
severity        4           Major	
severity        5           Critical	
severity        6           Blocker

Tham số PROJECT_AREA_ITEMID là bắt buộc đối với một tập dữ liệu được tạo ra từ bảng ENUMERATIONS. Nếu bạn để trống tham số này, bạn sẽ không nhận được bất kỳ kết quả nào trong tập dữ liệu. Bạn có thể sử dụng biến '{Current Project Area}' (bao gồm cả dấu nháy khi bạn chuyển cho tham số) để nhận được vùng dự án hiện tại, hoặc bạn có thể chỉ rõ ID vùng dự án theo cách thủ công.

Để cho dễ đọc, bạn có thể muốn hiển thị nhãn của giá trị kiểu liệt kê (trong trường hợp này, đó là các giá trị chuỗi ký tự như "Major" (lớn) hay " Minor"(nhỏ)), chứ không phải là ID duy nhất của giá trị đó sẽ hiển thị. Tuy nhiên, các bảng có chứa thông tin về các mục công việc, chẳng hạn như bảng LIVE_WORKITEMS_CNT, hiển thị ID của giá trị chứ không phải là nhãn, như Liệt kê 2 minh họa.

Liệt kê 2. Các mục công việc theo mức nghiêm trọng
WI_ID   SUMMARY         WI_SEVERITY	
1234    Small glitch    2	
5678    Medium problem  3	
9123    Big problem!    5

Vì vậy, bạn phải tham khảo chéo các ID duy nhất trong bảng LIVE_WORKITEMS_CNT với các giá trị trong bảng ENUMERATIONS. Tuy nhiên, báo cáo của bạn có thể sử dụng các kiểu liệt kê ở nhiều nơi. Bạn có thể lồng một tập dữ liệu kiểu liệt kê ở mọi nơi bạn sử dụng giá trị kiểu liệt kê đó, nhưng điều đó sẽ tạo ra quá nhiều bảng trên báo cáo và làm tăng thời gian tải của nó. Bạn có thể nối tập dữ liệu kiểu liệt kê với tập dữ liệu của các mục công việc, nhưng việc đó có thể khó sử dụng nếu tập dữ liệu của các mục công việc cũng được nối với một tập dữ liệu khác. Một cách đơn giản hơn là tạo một đối tượng JavaScript chung toàn cục, liên kết từng giá trị của kiểu liệt kê với nhãn của nó. Sau đó, bạn có thể tham khảo đối tượng đó bất cứ lúc nào bạn cần phải xem xét mức nghiêm trọng của một mục công việc.

Trình diễn video

Trình diễn video của kỹ thuật này có sẵn trên kênh IBM Jazz YouTube (xem phần Tài nguyên)

Các bước sau đây trình bày những điều cơ bản của kỹ thuật này:

  1. Tạo một tập dữ liệu cho các giá trị kiểu liệt kê, chẳng hạn như ví dụ ở trên với kiểu liệt kê mức nghiêm trọng. Bằng cách sử dụng thẻ Preview, hãy chắc chắn rằng nó hiển thị dữ liệu cho kiểu liệt kê mà bạn quan tâm.

Bạn không muốn hiển thị tập dữ liệu này trực tiếp trên báo cáo, nhưng bạn phải thêm nó vào báo cáo theo cách nào đó hoặc trái lại báo cáo sẽ không điền dữ liệu vào tập dữ liệu. Các bước sau đây thêm một tham chiếu vô hình vào tập dữ liệu trên báo cáo.

  1. Từ khung nhìn Palette, kéo một trường văn bản động tới phần trên cùng của báo cáo.
  2. Nhập biểu thức sau đây vào trình soạn thảo biểu thức:
    Total.count();
  3. Nhấn OK.
  4. Chọn trường văn bản động mới và mở khung nhìn Property Editor (Trình soạn thảo thuộc tính) với thẻ Binding (Kết buộc).
  5. Trong danh sách Data Set, chọn tập dữ liệu của bạn.
  6. Chuyển đến thẻ Properties và nhấn vào phần Visibility.
  7. Đánh dấu chọn hộp kiểm Hide Element (Ẩn dấu phần tử) và nút tròn For all outputs (Với tất cả các kết quả đầu ra).

Bây giờ tập dữ liệu sẽ được điền dữ liệu khi báo cáo chạy, nhưng dữ liệu thô sẽ không xuất hiện trực tiếp trên báo cáo.

  1. Trong khung nhìn Data Explorer, chọn tập dữ liệu.
  2. Trong trình soạn thảo báo cáo, chuyển đến thẻ Script.

Thẻ này cho thấy các kịch bản lệnh tùy chỉnh để kiểm soát tập dữ liệu. Một hướng dẫn đầy đủ cho việc tạo kịch bản lệnh BIRT nằm ngoài phạm vi của bài viết này, nhưng nói ngắn gọn, mỗi tập dữ liệu có thể có một số trình xử lý sự kiện chạy tại một số thời điểm nhất định trong vòng đời của tập dữ liệu. Trong trường hợp này, bạn cần tạo ra một đối tượng JavaScript khi mở tập dữ liệu và sau đó bạn cần thêm thông tin cho đối tượng đó với từng hàng trong tập dữ liệu.

  1. Trong danh sách Script ở phía trên cùng của trình soạn thảo, chọn sự kiện beforeOpen. Sự kiện này xảy ra chỉ một lần: trước khi điền dữ liệu vào tập dữ liệu.
  2. Nhập đoạn mã sau vào trình soạn thảo:
    severity = new Object();
  3. Trong danh sách Script, chọn onFetch. Sự kiện này xảy ra một lần cho mỗi hàng trên tập dữ liệu.
  4. Nhập đoạn mã sau làm trình xử lý sự kiện onFetch:
    severity[row["LITERAL_ID"]] = row["LITERAL_NAME"];

Mã này thêm một cặp tên và giá trị liên kết với nhau vào đối tượng. Khi tập dữ liệu được điền đầy đủ và đối tượng được tạo ra, bạn có thể sử dụng nó để tra tìm nhãn cho mỗi giá trị kiểu liệt kê. Ví dụ, việc chèn mã severity[1] tìm ra " Unassigned" (chưa được phân công).

Sử dụng các đối tượng trong các tập dữ liệu khác

Bây giờ bạn có thể sử dụng đối tượng này trong các tập dữ liệu khác. Ví dụ, nếu bạn có một tập dữ liệu của các mục công việc, bạn có thể thêm một cột được tính toán để hiển thị mức nghiêm trọng.

  1. Mở trình soạn thảo tập dữ liệu cho một tập dữ liệu liệt kê các mục công việc.
  2. Trên thẻ Fact Information, hãy chắc chắn rằng thẻ WI_SEVERITY được chọn làm một cột đầu ra.
  3. Trên thẻ Computed Columns (Các cột được tính), thêm một cột được tính mới có kiểu String và đặt tên, ví dụ như là Severity Name (Tên mức nghiêm trọng).

Trong trường Expression, nhập mã sau đây:
severity[row["WI_SEVERITY"]]

Hình 5. Tạo cột được tính
Chỉnh sửa Tập dữ liệu – Cột được tính mới

Tập dữ liệu này sẽ không hiển thị bất kỳ thông tin nào trên thẻ Preview Results (Xem trước các kết quả), vì đối tượng JavaScript vẫn chưa được điền dữ liệu. Tuy nhiên, khi bạn chạy báo cáo này, tập dữ liệu hiển thị tên mức nghiêm trọng trong cột thích hợp vì nó có thể sử dụng các giá trị từ đối tượng, như Liệt kê 3 cho thấy:

Liệt kê 3. Tập dữ liệu của các mục công việc bao gồm cột được tính mới
WI_ID   SUMMARY         WI_SEVERITY  Severity Name
1234    Small glitch    2            Minor
5678    Medium problem  3            Normal
9123    Big problem!    5            Critical

Các phép nối bảng

Giống như trong SQL, có thể nối các tập dữ liệu BIRT. Các chi tiết về nối bảng SQL nằm ngoài phạm vi của bài viết này. Nhưng nói đơn giản, một phép nối bảng tạo ra một bảng kết hợp từ hai bảng khác.

Phương pháp này có lợi thế về việc tạo ra một tập dữ liệu đơn lẻ với thông tin từ hai bảng trong kho lưu trữ, không giống như kỹ thuật tập dữ liệu lồng nhau. Làm việc với chỉ một tập dữ liệu đơn lẻ sẽ dễ dàng hơn khi sử dụng logic đòi hỏi thông tin từ cả hai bảng, việc định dạng và bố trí chỉ một bảng đơn lẻ trên báo cáo có thể dễ dàng hơn so với nhiều bảng lồng nhau. Ngoài ra, một số kiểu nguồn dữ liệu (chẳng hạn như các tệp XML) không hỗ trợ các tham số, do đó các phép nối bảng có lẽ là lựa chọn tốt nhất tiếp theo.

Ví dụ, bảng STATE (Liệt kê 4) trong ảnh chụp WORKITEMS_SNAPSHOT lưu trữ thông tin về các trạng thái có thể có của các mục công việc.

Liệt kê 4. Dữ liệu mẫu từ bảng STATE
STATE      STATE_GROUP         STATE_NAME 
_Efk74JK1  OPEN_STATES         New 
_Efk74JK6  OPEN_STATES         Reopened 
_Efk74JK7  OPEN_STATES         Triaged 
_Efk74JK2  IN_PROGRESS_STATES  In Progress 
_Efk74JK4  CLOSED_STATES       Verified 
_Efk74JK3  CLOSED_STATES       Resolved 
_Efk74JK5  CLOSED_STATES       Closed

Bảng LIVE_WORKITEM_CNT (Liệt kê 5) gồm có một cột tham khảo trạng thái trong bảng STATE. Các trạng thái trong bảng STATE được nối thêm tiền tố là ID của vùng dự án còn các trạng thái trong bảng LIVE_WORKITEM_CNT thì không, nhưng bạn sẽ chỉnh sửa điều đó sau này.

Liệt kê 5. Dữ liệu mẫu từ bảng LIVE_WORKITEM_CNT
WI_ID   SUMMARY         STATE_NAME
4321    Fixed issue     3
9876    New problem     1
1111    Current work    2

Như với kiểu liệt kê mức nghiêm trọng được mô tả trong phần trước, sẽ thuận tiện hơn nếu có thông tin nhóm trạng thái và tên trạng thái trong cùng một tập dữ liệu như thông tin mục công việc. Bạn có thể làm điều này bằng cách nối các bảng và hợp nhất thông tin giữa chúng. Theo thuật ngữ SQL, việc hợp nhất này đòi hỏi một phép nối ngoài, so khớp mỗi hàng trong tập dữ liệu các mục công việc với từng hàng đơn lẻ trong tập dữ liệu các trạng thái có ID trạng thái trùng khớp.

  1. Tạo một tập dữ liệu liệt kê các mục công việc, bao gồm cột STATE_NAME.
  2. Thêm một cột được tính vào tập dữ liệu các mục công việc có tên là "State ID" để ghép nối tên của vùng dự án với cột STATE_NAME (xem Liệt kê 6). Giá trị cho cột này có thể trông như sau:
    '_Efk74JK'+row["STATE_NAME"]. Cột được tính khớp với giá trị ID trong bảng trạng thái.
Liệt kê 6. Dữ liệu mẫu từ bảng STATE
WI_ID   SUMMARY         STATE_NAME  State ID
4321    Fixed issue     3           _Efk74JK3
9876    New problem     1           _Efk74JK1
1111    Current work    2           _Efk74JK2
  1. Tạo một tập dữ liệu liệt kê các trạng thái trong bảng STATE.
  2. Trong khung nhìn Data Explorer, nhấn chuột phải vào Data Sets rồi nhấn New Joint Data Set (Tập dữ liệu nối mới).
  3. Trong cửa sổ New Joint Data Set, chọn tập dữ liệu các mục công việc ở bên trái và sau đó chọn cột State ID ở dưới tên tập dữ liệu.
  4. Ở bên phải, chọn tập dữ liệu trạng thái rồi chọn cột STATE.
  5. Trong Join Types, nhấn Left Outer Join (phép nối ngoài trái).
  6. Đặt tên cho tập dữ liệu, ví dụ như là Join Work Items to States (Nối các mục công việc với các trạng thái).
Hình 6. Nối các tập dữ liệu
Cửa sổ Nối tập dữ liệu
  1. Nhấn Finish.

Tập dữ liệu kết nối mới (Liệt kê 7) chứa thông tin kết hợp từ cả hai tập dữ liệu. Đừng xóa hai tập dữ liệu ban đầu, vì báo cáo vẫn còn sử dụng chúng để điền dữ liệu vào trong tập dữ liệu kết nối.

Liệt kê 7. Các kết quả từ tập dữ liệu kết nối
Work items::WI_ID  Work items::State ID  States::STATE  States::STATE_NAME
4321              _Efk74JK3              _Efk74JK3      Resolved
9876              _Efk74JK1              _Efk74JK1      New
1111              _Efk74JK2              _Efk74JK2      In Progress

Đếm kết quả với cột WI_COUNT

Hầu hết các bảng trong ảnh chụp các mục công việc đều có cột WI_COUNT, hiển thị tổng số các mục công việc có các đặc điểm phù hợp. Ví dụ, giả sử bạn muốn biết tổng số các mục công việc trong kho lưu trữ là bao nhiêu. Trong trường hợp này, bạn có thể sử dụng bảng LIVE_WORKITEM_CNT và chỉ rõ cột WI_COUNT duy nhất ở đầu ra:

WI_COUNT	
656

Nếu bạn chỉ định các cột khác gồm trong các kết quả, cột WI_COUNT đếm số các mục công việc theo từng cột trong số các cột đó. Ví dụ, nếu bạn thêm cột TEAM_AREA_NAME vào đầu ra, cột WI_COUNT hiển thị số các mục công việc trong từng vùng nhóm:

TEAM_AREA_NAME  WI_COUNT	
Team A          134
Team B          312
Team C          210

Bạn có thể làm tương tự với các kiểu mục công việc bằng cách chỉ lấy WI_COUNT và WI_TYPE làm các cột đầu ra:

WI_TYPE     WI_COUNT
story       25
defect      505
task        126

Cột WI_COUNT thường được sử dụng với các bảng lịch sử, như được mô tả trong phần tiếp theo.


Lấy dữ liệu lịch sử

Cho đến nay, bạn đã thấy Rational Team Concert cung cấp thông tin cho các báo cáo trong các bảng, là cơ sở của các tập dữ liệu trong BIRT. Một số trong các bảng này lấy dữ liệu sống (đang hoạt động) trong kho lưu trữ Rational Team Concert, ví dụ như bảng LIVE_WORKITEMS_CNT mà bạn vẫn sử dụng để lấy thông tin về các mục công việc. Nếu một mục công việc thay đổi, thì sự thay đổi đó sẽ được phản ánh ngay lập tức trong bảng này.

Các bảng khác đến từ một quầy dữ liệu (data mart), chứ không phải trực tiếp từ kho lưu trữ. Rational Team Concert lọc và định dạng thông tin phức tạp trong quầy dữ liệu để cung cấp dữ liệu đó theo một cấu trúc thuận tiện hơn. Ví dụ, máy chủ Rational Team Concert ghi lại thông tin trong quầy dữ liệu về những thay đổi với kho lưu trữ, ví dụ như có bao nhiêu mục công việc mới được tạo ra mỗi ngày. Như vậy, với quầy dữ liệu, bạn có thể lấy ra thông tin không chỉ về trạng thái hiện tại của kho lưu trữ mà còn về các xu hướng, các thay đổi và các chu kỳ thời gian.

Khi bạn tạo hoặc chạy các báo cáo, điều quan trọng cần nhớ là các thông tin trong quầy dữ liệu có thể tụt hậu so với dữ liệu trong kho lưu trữ. Trong phần trước của loạt bài này, bạn tạo ra một tập dữ liệu của những người dùng. Nếu bạn vừa cài đặt máy chủ Rational Team Concert mới đây thì bảng đó không hiển thị bất kỳ người dùng nào trong kho lưu trữ. Để khắc phục vấn đề này, bạn phải buộc máy chủ lấy một ảnh chụp của kho lưu trữ và cập nhật quầy dữ liệu. Tương tự như vậy, nếu bạn tạo ra một vùng nhóm làm việc mới, vùng nhóm đó sẽ không xuất hiện trong bảng TEAM_AREA cho đến khi máy chủ cập nhật quầy dữ liệu. (Theo mặc định, Rational Team Concert cập nhật quầy dữ liệu tự động mỗi lần 24 giờ, nhưng các quản trị viên có thể cập nhật các ảnh chụp trong quầy dữ liệu theo cách thủ công).

Trong một số trường hợp, bạn có thể chọn giữa dữ liệu từ quầy dữ liệu và dữ liệu từ kho lưu trữ. Ví dụ, ảnh chụp COMMON_SNAPSHOT chứa hai bảng với thông tin về những người dùng Rational Team Concert:

  • CONTRIBUTOR, cho thấy thông tin từ quầy dữ liệu.
  • LIVE_CONTRIBUTOR, cho thấy thông tin trực tiếp từ kho lưu trữ.

Mỗi bảng cung cấp thông tin hơi khác nhau một chút, vì vậy hãy chú ý xem bạn đang sử dụng dữ liệu sống hay dữ liệu lịch sử để tránh đưa vào các xung đột hoặc các mâu thuẫn vào trong các báo cáo của bạn.

Bạn có thể nghĩ về quầy dữ liệu như một bộ nhớ sẵn (cache) dữ liệu của kho lưu trữ. Việc truy cập bộ nhớ sẵn thay vì trực tiếp từ kho lưu trữ có thể thuận tiện hơn và có thể tạo ra hiệu năng tốt hơn. Ngoài ra, BIRT có thể tận dụng lợi thế của quầy dữ liệu như một bộ nhớ sẵn. Nếu bạn đánh dấu chọn hộp kiểm Supports Data Caching (Hỗ trợ nhớ sẵn dữ liệu) khi bạn tải khuôn mẫu báo cáo lên máy chủ, BIRT chỉ sử dụng dữ liệu từ quầy dữ liệu. Do đó, nếu báo cáo của bạn chỉ sử dụng các bảng từ quầy dữ liệu, thì hãy đánh dấu chọn hộp kiểm này; nếu báo cáo của bạn sử dụng bất kỳ các bảng dữ liệu sống nào, hãy xóa dấu chọn hộp kiểm này.

Hầu hết các bảng có sẵn cho các báo cáo của bạn là từ quầy dữ liệu. Hầu hết các bảng dữ liệu sống có từ khóa "live" (sống) trong tên của chúng. Dưới đây là các bảng dữ liệu sống trong Rational Team Concert 2.0:

  • Tất cả các bảng trong ảnh chụp LIVE_SNAPSHOT.
  • Trong ảnh chụp WORKITEMS_SNAPSHOT, có các bảng sau đây:
    • LIVE_WORKITEM_CNT
    • WORKITEM_EXTRA_DATA
    • WORKITEM_QUERY_RESULTS
    • ENUMERATIONS
  • Trong ảnh chụp APT_SNAPSHOT, có các bảng sau đây:
    • CONTRIBUTOR_ABSENCE
    • LIVE_CONTRIBUTOR_ASSIGNMENT
    • LIVE_CONTRIBUTOR_WORKITEM_TIME
    • LIVE_TEAM_CAPACITY


Tất cả các bảng khác hiển thị dữ liệu từ quầy dữ liệu.

Thuật ngữ quầy dữ liệu

Hầu hết các tài liệu Rational Team Concert và giao diện người dùng nói đến quầy dữ liệu như là một "kho dữ liệu." Về mặt kỹ thuật, một kho dữ liệu cung cấp dữ liệu lịch sử, dữ liệu gộp, hoặc có biến đổi từ nhiều nguồn, còn một quầy dữ liệu cung cấp kiểu dữ liệu này từ một nguồn duy nhất. Sự khác biệt chỉ rõ ràng khi bạn đang làm việc với nhiều kho lưu trữ hoặc nhiều sản phẩm khác nhau.

Có một số bảng trong ảnh chụp WORKITEMS hiển thị thông tin lịch sử về các mục công việc từ quầy dữ liệu:

WORKITEM_CHNGS

Bảng này (Liệt kê 8) hiển thị thông tin về những thay đổi với các mục công việc. Ví dụ, nếu bạn chuyển số của mục công việc làm tham số, tập dữ liệu kết quả hiển thị ngày tháng và thời gian của mỗi thay đổi với mục công việc này, cùng với thông tin về mục công việc tại thời điểm đó, chẳng hạn như số lượng các nhận xét và trạng thái của mục công việc này.

Liệt kê 8. Dữ liệu mẫu từ bảng WORKITEM_CHNGS
TIME_ID.TIMESTAMP     WI_ID CONTRIBUTOR_NAME STATE_GROUP  COMMENT_COUNT

Dec 9, 2008 3:37 PM   1234  Bill             OPEN_STATES              0

Apr 14, 2009 4:54 PM  1234  Joe              OPEN_STATES              1

Jun 2, 2009 1:40 PM   1234  Joe              OPEN_STATES              1

Oct 7, 2009 9:32 AM   1234  Joe              OPEN_STATES              2

Oct 30, 2009 1:20 PM  1234  Jane             OPEN_STATES              2

Oct 30, 2009 3:35 PM  1234  Steve            OPEN_STATES              2

Oct 30, 2009 3:50 PM  1234  Steve            CLOSED_STATES            3

Nov 9, 2009 1:20 PM   1234  Steve            CLOSED_STATES            3

Cũng như với các bảng dữ liệu sống, bạn có thể chuyển các tham số khác nhau và nhận thông tin khác nhau từ bảng này. Ví dụ, nếu bạn chuyển một tên người dùng làm tham số PREV_OWNER_ID.CONTRIBUTOR_USERID (nghĩa là “chủ sở hữu trước” của mục công việc) và chuyển một tên người dùng khác làm tham số OWNER_ID.CONTRIBUTOR_USERID (là “chủ sở hữu hiện tại” của mục công việc), thì tập dữ liệu kết quả cho thấy tất cả mọi lần mà mục công việc đã được chuyển giao từ người dùng đầu tiên sang cho người dùng thứ hai.

NEW_WI_COUNT

Bảng này (Liệt kê 9) cho thấy số các mục công việc mới được tạo ra trong bất kỳ ngày cụ thể nào, theo tiêu chí mà bạn quy định trong các tham số. Ví dụ, nếu bạn chọn dấu thời gian, WI_SEVERITY và WI_COUNT làm các cột đầu ra, tập dữ liệu cho thấy số lượng các mục công việc của mỗi mức nghiêm trọng đã được tạo ra mỗi ngày.

Liệt kê 9. Dữ liệu mẫu từ bảng NEW_WI_COUNT
TIMESTAMP             WI_SEVERITY  WI_COUNT 
Apr 22, 2009 8:00 PM  Normal       27 
Apr 23, 2009 8:00 PM  Normal       38 
Apr 24, 2009 8:00 PM  Major        4 
Apr 24, 2009 8:00 PM  Normal       12
Apr 25, 2009 8:00 PM  Major        2 
Apr 25, 2009 8:00 PM  Normal       13

Nếu bạn chọn cột TEAM_AREA_NAME thay vì cột mức nghiêm trọng, tập dữ liệu (Liệt kê 10) cho thấy số lượng các mục công việc được tạo ra mỗi ngày theo vùng nhóm mà ở đó chúng được tạo ra.

Liệt kê 10. Dữ liệu mẫu từ bảng NEW_WI_COUNT
TIMESTAMP             TEAM_AREA_NAME  WI_COUNT 
Jun 25, 2009 8:00 PM  /Team A         1 
Jun 25, 2009 8:00 PM  /Team B         4 
Jun 25, 2009 8:00 PM  /Team C         1 
Jun 26, 2009 8:00 PM  /Team A         2 
Jun 26, 2009 8:00 PM  /Team B         5 
Jun 26, 2009 8:00 PM  /Team C         2

Bảng này lưu trữ dữ liệu từ lúc kho lưu trữ được tạo ra; do đó, tập dữ liệu kết quả có thể rất lớn. Để thu gọn lại các kết quả này, bảng NEW_WI_COUNT bao gồm các tham số mặc định được gọi là FROM_TIME và TO_TIME, mà bạn có thể sử dụng để quy định phạm vi một số ngày cho các kết quả. Bạn có thể sử dụng mã JavaScript trong trình soạn thảo biểu thức BIRT để tính toán các phạm vi này, nhưng BIRT cũng bao gồm ngày tháng, thời gian và các đối tượng dấu thời gian cho các tham số này. Ví dụ, nếu bạn muốn hạn chế kết quả trong 10 ngày qua, bạn có thể chỉ rõ BirtDateTime.today() cho tham số TO_TIME và BirtDateTime.addDay(BirtDateTime.today(), -10) cho FROM_TIME (xem Hình 7).

Hình 7. Thiết lập phạm vi thời gian cho một tập dữ liệu lịch sử
Khung nhìn Tập dữ liệu hiển thị bảng Các tham số

Các đối tượng BIRT này có sẵn trong trình soạn thảo biểu thức trong BIRT Functions (Các hàm BIRT).

Hình 8. Lựa chọn hàm today() của BIRT
Hiển thị hàm 'today() : DateTime' được chọn

Thông tin tham khảo về các đối tượng này có sẵn trong tài liệu tham khảo BIRT của Eclipse (xem phần Tài nguyên).

WORKITEM_STATES

Giống như bảng NEW_WI_COUNT, bảng này (Liệt kê 11) hiển thị thông tin về số lượng các mục công việc đáp ứng tiêu chí nhất định tại những thời điểm nhất định. Ví dụ, nếu bạn chọn cột WI_SEVERITY, các kết quả cho thấy số lượng các mục công việc với mức nghiêm trọng đã cho theo mỗi ngày.

Liệt kê 11. Dữ liệu mẫu từ bảng WORKITEM_STATES
TIMESTAMP              WI_SEVERITY   WI_COUNT 
Nov 10, 2009 12:20 PM  Blocker       15 
Nov 10, 2009 12:20 PM  Critical      50 
Nov 10, 2009 12:20 PM  Major         183 
Nov 10, 2009 12:20 PM  Minor         79 
Nov 10, 2009 12:20 PM  Normal        10832 
Nov 10, 2009 12:20 PM  Unclassified  10 
Nov 11, 2009 12:20 PM  Blocker       16
Nov 11, 2009 12:20 PM  Critical      48
Nov 11, 2009 12:20 PM  Major         192 
Nov 11, 2009 12:20 PM  Minor         76 
Nov 11, 2009 12:20 PM  Normal        10882 
Nov 11, 2009 12:20 PM  Unclassified  9

(Trong trường hợp này, bạn có thể muốn lọc các mục công việc đã đóng).

Tương tự như vậy, bạn có thể chọn cột TEAM_AREA_NAME (Liệt kê 12) để xem số lượng các mục công việc có liên quan với từng vùng nhóm mỗi ngày.

Liệt kê 12. Dữ liệu mẫu từ bảng WORKITEM_STATES
TIMESTAMP             TEAM_AREA_NAME  WI_COUNT 
Nov 2, 2009 12:05 PM  /Team A         6 
Nov 2, 2009 12:05 PM  /Team B         12 
Nov 2, 2009 12:05 PM  /Team C         3 
Nov 1, 2009 12:05 PM  /Team A         8
Nov 1, 2009 12:05 PM  /Team B         10 
Nov 1, 2009 12:05 PM  /Team C         6

Thông tin thêm về các bảng và các ảnh chụp có sẵn trong wiki jazz.net (xem phần Tài nguyên).


Các mẹo nhỏ và thủ thuật định dạng khác

Liên kết tới các mục công việc

Thật dễ dàng để liên kết từ một báo cáo đến một mục công việc nếu bạn có số của mục công việc, được thể hiện như cột WI_ID. Ví dụ, nếu bạn có một bảng các mục công việc trên một báo cáo, bạn có thể chọn bất kỳ trường nào trong bảng đó (thậm chí không phải là trường WI_ID) và liên kết nó với các mục công việc tương ứng.

  1. Thêm một bảng các mục công việc vào một báo cáo.
  2. Chọn bất kỳ trường dữ liệu nào trong bảng, ví dụ như trường SUMMARY (Tóm tắt).
  3. Trong khung nhìn Property Editor, nhấn vào thẻ Hyperlink (Siêu liên kết).
  4. Nhấn vào nút ... (duyệt, ba chấm) của các ellipse bên cạnh Link to field (Liên kết đến trường).
  5. Trong cửa sổ Hyperlink Options (Các tùy chọn siêu liên kết), nhấn vào URI và chèn mã sau đây vào trường Location:
    '/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/'+row["WI_ID"]
  6. Nhấn OK.

Cửa số bật lên của mục công việc

Trong các bảng điều khiển của Rational Team Concert, khi bạn di con trỏ trên một liên kết đến một mục công việc, một cửa sổ bật lên sẽ xuất hiện với thông tin về mục công việc đó. Bạn có thể mượn đoạn mã từ bảng điều khiển để làm cho các cửa sổ bật lên xuất hiện trên các tham chiếu tới các mục công việc trong các báo cáo của bạn. Tôi đã không thể làm cho các cửa sổ bật lên này cũng làm việc tốt như trên các bảng điều khiển (cửa sổ bật lên hiển thị một số thông báo không mong đợi ở đó) và các cửa sổ bật lên này không được Rational Team Concert hỗ trợ chính thức, nhưng chúng vẫn đủ tốt để sử dụng cho các việc cơ bản.

Hình 9. Một khung nhìn bật lên của mục công việc trong một bảng điều khiển
Thông tin về mục công việc trong khung nhìn bật lên
  1. Nhấn vào thẻ Master Page (Trang chủ) của trình soạn thảo báo cáo. Master Page có các phần ở đầu trang và cuối trang để chứa thông tin cho tiêu đề và chân trang. Bạn sẽ nhập mã của bảng điều khiển vào tiêu đề sao cho mã được nhập khẩu chỉ một lần trong báo cáo.
  2. Từ khung nhìn Palette, kéo một trường Text vào vùng tiêu đề của báo cáo.
  3. Chèn mã được hiển thị trong Liệt kê 13 vào trường văn bản.
Liệt kê 13. Mã cho các cửa sổ bật lên của mục công việc trong các báo cáo
<code style="display:none">
<script>


dojo.require("jazz.app.ResourceLink");
dojo.require("jazz.app.proxy");
dojo.require("jazz.app.auth");

this.inherited(arguments);
this._skipOAuth = true;

</script>
</code>
  1. Trong một ô dữ liệu của một bảng trên báo cáo, thêm một trường Text khác. Bạn sẽ sử dụng trường văn bản này thay cho các trường dữ liệu thông thường hiển thị thông tin từ tập dữ liệu, chẳng hạn như là bản tóm tắt và ID của mục công việc.
  2. Trong trường văn bản, nhập mã sau đây từ Liệt kê 14.
Liệt kê 14. Mã cho các cửa sổ bật lên của mục công việc trong các báo cáo
<a target="_self" class="jazz-app-ResourceLink" 
id="jazz_app_ResourceLink_<VALUE-OF>row["WI_ID"]</VALUE-OF>" 
href="/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/
<VALUE-OF>row["WI_ID"]</VALUE-OF>">
<VALUE-OF>row["SUMMARY"]</VALUE-OF></a>

<code style="display:none">
<script>
titleLink = 
document.getElementById("jazz_app_ResourceLink_<VALUE-OF>row["WI_ID"]</VALUE-OF>");
new jazz.app.ResourceLink({retainLinkText: true},titleLink);
if (titleLink.lastChild.nodeName == "IMG"){
titleLink.removeChild(titleLink.lastChild);
};
</script>
</code>

Mã này bắt đầu bằng cách tạo một liên kết đến mục công việc bằng một thẻ <a>. Mã này gán một ID cụ thể cho thẻ <a>. Trong trường hợp này, nó tạo ra một ID duy nhất bằng cách nối thêm số của mục công việc vào chuỗi ký tự jazz_app_ResourceLink_. Lưu ý: ID này phải là duy nhất cho toàn bộ báo cáo. Nếu các mục công việc được hiển thị nhiều hơn một lần trên báo cáo, bạn phải phân biệt các ID bằng cách nào đó.

Phần thứ hai của mã này, bên trong thẻ <code>, sẽ lấy ra thẻ <a> đó theo ID duy nhất của nó. Sau đó, nó tạo ra một đối tượng jazz.app.ResourceLink biểu thị cửa sổ bật lên và các liên kết đến đối tượng cho thẻ đó. Cuối cùng, có một câu lệnh if thực hiện xóa dữ liệu thừa trên đầu ra của thẻ <a> trong báo cáo.

Kết quả tương tự như các liên kết và cửa sổ bật lên trên bảng điều khiển.


Sử dụng các ảnh chụp khác

Bài viết này đã tập trung vào các ảnh chụp chung và các ảnh chụp mục công việc vì các ảnh chụp này cung cấp hầu hết các thông tin được các báo cáo sử dụng trong Rational Team Concert. Tuy nhiên, các ảnh chụp khác có thể cung cấp thông tin về các vùng khác của kho lưu trữ. Để biết thêm thông tin chi tiết về các ảnh chụp và các bảng trong chúng, xem Rational Team Concert wiki (các liên kết có sẵn trong phần Tài nguyên).

Bảng 1. Các ảnh chụp khác của kho lưu trữ
Ảnh chụpMô tả
APT_SNAPSHOTẢnh chụp này cung cấp thông tin về phân công công việc cho những người dùng và phần thời gian nào của họ được phân cho các mẩu công việc cụ thể.
BUILD_SNAPSHOTCác bảng trong ảnh chụp này có chứa thông tin về việc xây dựng và thử nghiệm trên máy chủ.
LIVE_SNAPSHOTẢnh chụp này cung cấp truy cập trực tiếp đến thông tin trong kho lưu trữ. Thông tin này là phức tạp hơn vì thông tin được lập chỉ mục theo tên lớp được phân biệt đầy đủ chứ không phải là các nhãn dễ đọc với con người, nhưng nếu bạn không thể tìm thấy những gì bạn cần trong các ảnh chụp khác, bạn có thể tìm thấy nó ở đây.
REPOSITORY_SNAPSHOTẢnh chụp này ghi lại thông tin về toàn bộ nội dung của kho lưu trữ, bao gồm các bảng điều khiển, các kết quả xây dựng và các tập thay đổi. Hầu hết các thông tin này là có sẵn trong các ảnh chụp khác.
SCM_SNAPSHOTCác bảng trong ảnh chụp này có chứa thông tin về kho lưu trữ kiểm soát nguồn, ví dụ như các tập thay đổi, các thành phần và các luồng.

Lời cảm ơn

Tác giả biết ơn các nhà phát triển Rational Team Concert James Moody và Rafik Jaouani vì đóng góp của họ cho bài viết này và vì thông tin rất có ích mà họ cung cấp trên jazz.net và các diễn đàn jazz.net.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Rational
ArticleID=785190
ArticleTitle=Tạo các báo cáo tuỳ chỉnh với BIRT và Rational Team Concert, Phần 3: Các kỹ thuật tạo báo cáo nâng cao
publish-date=01122012