Các tiêu chuẩn hoặc cách thực hành tốt nhất để xử lý lỗi trong SSRS


7

Tôi đã gặp phải một vấn đề định kỳ với SSRS nơi các báo cáo "xấu" được gửi tới khách hàng. Vấn đề là chúng tôi có báo cáo với một số báo cáo con và một hoặc nhiều báo cáo con sẽ không được xử lý. Khi báo cáo con không xử lý, báo cáo sẽ gửi thông báo lỗi thay cho báo cáo phụ và không có dữ liệu thực tế.

Câu hỏi của tôi là, có cách nào để ngăn chặn một báo cáo gửi nếu một báo cáo con không thành công?

Lý tưởng nhất là tôi muốn báo cáo bên ngoài chỉ trả về một lỗi. Có cách nào để có các trạng thái lỗi trong báo cáo SSRS leo thang đến phạm vi bên ngoài không? Có một tiêu chuẩn mã hóa nào chúng ta có thể thực thi có thể ngăn chặn vấn đề này không?

Chúng tôi hiện đang sử dụng cả SSRS 2008r2 và SSRS 2016.


4
IIRC, khi một lỗi báo cáo con không có nhiều điều bạn có thể làm về nó cũng như bạn sẽ không biết (không có sự kiện nào được nêu ra). Lời khuyên tôi đã nghe là tránh các báo cáo con và về cơ bản viết lại báo cáo N lần
billinkc

Câu trả lời:


4

Như billinkc đã lưu ý trong bình luận của mình, không có cách nào để tuyên truyền các lỗi báo cáo con cho các báo cáo chính.

Bằng chứng trong bài đăng MSDN này, bạn có thể thử sử dụng các đăng ký theo hướng dữ liệu để thúc đẩy đăng ký, nhưng điều đó có thể trở nên lộn xộn nếu có bất kỳ sự phức tạp nào liên quan thực sự nhanh chóng.

Nếu bạn xem các công việc của Tác nhân SQL cho một máy chủ sử dụng các đăng ký SSRS, bạn sẽ thấy một loạt các công việc của Tác nhân SQL có tên GUID, bạn có thể sửa đổi các công việc đó để thêm một bước chạy một số bước xác thực dữ liệu trước khi thực sự chạy báo cáo thất bại công việc trước khi báo cáo được gửi đi (có nguy cơ định nghĩa công việc của bạn bị ghi đè bởi SSRS) hoặc gọi công việc từ một công việc khác sau khi xác thực logic dữ liệu.

Bạn có thể xác định GUID được liên kết với báo cáo bằng truy vấn này:

SELECT
            b.name AS JobName
            , e.name
            , e.path
            , d.description
            , a.SubscriptionID
            , laststatus
            , eventtype
            , LastRunTime
            , date_created
            , date_modified
    FROM ReportServer.dbo.ReportSchedule a JOIN msdb.dbo.sysjobs b
          ON a.ScheduleID = b.name
            JOIN ReportServer.dbo.ReportSchedule c
            ON b.name = c.ScheduleID
            JOIN ReportServer.dbo.Subscriptions d
            ON c.SubscriptionID = d.SubscriptionID
            JOIN ReportServer.dbo.Catalog e
            ON d.report_oid = e.itemid
    WHERE e.name = 'Sales_Report'

(lấy từ đây )

TL / DR: không có giải pháp sạch nhưng bạn có thể thoát khỏi một số hack, bạn sẽ cần triển khai logic trong đăng ký theo hướng dữ liệu hoặc tạo một công việc bổ sung / sửa đổi công việc đã tạo

PS: Tôi đã không kiểm tra bất kỳ phương pháp nào trong số những cách tiếp cận này


1
Không phải những gì tôi đã hy vọng nhưng dù sao một câu trả lời. Nếu tôi tránh các báo cáo con, liệu có bất kỳ lỗi nào trong một phần của báo cáo không làm hỏng toàn bộ báo cáo không?
JNK

@JNK Có thể có lỗi, nhưng một bộ dữ liệu trống vẫn không có
Tom V - thử topanswers.xyz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.