2012-06-27 27 views
6

Tôi đã googled nó rất nhiều và thấy rằng thông thường nó không thể được thực hiện. Tôi đã xem qua một trong những hacks đây:Dịch vụ báo cáo Cscading Làm mới tham số

http://www.bp-msbi.com/2011/04/ssrs-cascading-parameters-refresh-solved/

Nhưng nó không làm việc cho tôi trong SSRS 2005. Chỉ cần tự hỏi nếu bất cứ ai khác đã cố gắng nó vào năm 2005. Hoặc là có bất kỳ hacks khác có thể bị xét xử.

Theo bài viết này tham số phụ thuộc chỉ được làm mới khi giá trị của nó bị vô hiệu bởi lựa chọn trong tham số đầu tiên. Nếu chúng ta có thể làm mất hiệu lực tham số phụ thuộc mỗi khi một tham số thay đổi, chúng ta sẽ thực thi làm mới hoàn toàn. Một cách dễ dàng để làm điều này là đính kèm một giá trị như GUID thu được với hàm NEWID() T-SQL.

Vì vậy, về cơ bản, chúng tôi muốn giới thiệu thông số giả ở giữa hai tham số thực. Tham số giả này được cho là sẽ trả về các giá trị mới mỗi khi phần lưu trữ đằng sau nó sẽ thêm một guid vào resultset mỗi khi proc được gọi. Vì vậy, nó buộc hoàn toàn làm mới các thông số khác.

Bây giờ vấn đề chính tôi đang gặp phải là:

Đặt giá trị mặc định của thông số giả này. Đối với các giá trị có sẵn, giá trị được lưu trữ đằng sau tham số giả chạy và nó trả về dữ liệu theo định dạng: result1, result2_GUIDFROMSQL

Bây giờ có vẻ như cùng một storedproc được gọi lại để đặt giá trị defult nếu tôi yêu cầu giá trị mặc định từ truy vấn. Nhưng như là storedproc được chạy một lần nữa guid mới đến và vì vậy giá trị cũ không thể được tìm thấy vì vậy nó không được thiết lập như mong muốn.

Tôi chỉ cần tìm ra cơ chế để chuyển hướng dẫn này từ tham số được giới thiệu đến thông số tiếp theo.

Đó là nơi tôi không thành công.

Sự cố của tôi có thể được sao chép đơn giản bằng cách tạo một tham số có nguồn dữ liệu là chuỗi truy vấn này.

select getdate() id, @name nid 

Vì vậy, trong trường hợp này cách đặt giá trị mặc định cho thông số này.

+1

có thể xây dựng thêm một chút về vấn đề chính xác mà bạn đang cố gắng để giải quyết, và có lẽ cũng trích dẫn các bit có liên quan từ liên kết của bạn để nếu các liên kết chết câu hỏi này sẽ vẫn có ý nghĩa riêng của nó? – Jeroen

+2

Cảm ơn Jeroen vì đã xem nó. Tôi đã chỉnh sửa câu hỏi dựa trên nhận xét của bạn. Hy vọng nó rõ ràng hơn bây giờ. – Abbi

+0

Cảm ơn bạn đã cập nhật, điều đó sẽ hữu ích. Tôi phải thừa nhận câu hỏi vẫn còn một chút khó đọc, và tôi không hoàn toàn hiểu được vấn đề, nhưng có lẽ ai đó khác có thể cung cấp một bàn tay giúp đỡ? – Jeroen

Trả lời

0

Cuối cùng tôi đã có thể giải quyết vấn đề này. Liên kết này là một khởi đầu hữu ích. http://www.optimusbi.com/2012/07/16/multilevel-cascading-select/

Về cơ bản những gì nó làm là: Viết truy vấn tham số theo cách để tham số phụ thuộc thay đổi giá trị mỗi khi bạn thay đổi thông số gốc.

Truy vấn thêm tên đóng băng với dấu "_" đặt trước nó. Vì vậy, mỗi khi người dùng chọn các giá trị khác, các thay đổi của rownumber và do đó kết quả truy vấn.

Sau đó, khi sử dụng resultset, hãy xóa văn bản sau dấu gạch dưới để nhận mã thực.

0

Có một giải pháp khắc phục sự cố này cho tất cả các trường hợp. Lưu ý rằng câu trả lời trước đó được cung cấp, viết tham số truy vấn theo cách sao cho tham số phụ thuộc thay đổi giá trị của nó mỗi khi bạn thay đổi tham số cha của nó, hoạt động đối với một số trường hợp nhưng không phải tất cả các trường hợp.Nếu giá trị "Available" của thông số phụ thuộc thay đổi do kết quả của tham số khác VÀ tham số phụ thuộc có thể nhìn thấy, nó hoạt động, Nếu tham số phụ thuộc bị ẩn hoặc nội bộ, hoặc nếu giá trị "Available" không thay đổi do kết quả của tham số khác tham số, nó sẽ không hoạt động.

Cách giải quyết đơn giản là xác định hàm tùy chỉnh trong báo cáo và gọi hàm đó trong biểu thức cho thông số phụ thuộc. Hàm tùy chỉnh nhận tham số (tham số mà tham số phụ thuộc phụ thuộc) giá trị làm đối số và chỉ trả về giá trị của tham số. Mặc dù hàm chỉ đơn giản là lấy giá trị và trả về nó, SSRS không kiểm tra mã và giả định rằng mã có thể làm bất cứ điều gì (tạo ra một số ngẫu nhiên, kéo tệp từ đĩa, v.v ...). Vì vậy SSRS gọi hàm này mỗi lần thay đổi giá trị bất kể giá trị "Có sẵn" của thông số phụ thuộc có thay đổi hay không và bất kể tham số phụ thuộc có thể nhìn thấy, ẩn hay nội bộ.

Something như thế này:

public function returnArg(ByVal TheArg As String) As String 
    return TheArg 
end function 

Giả sử bạn có hai thông số:

argument1 argument2

Và đó argument2 phụ thuộc vào argument1. giá trị

Set argument2 như là một biểu hiện bao gồm các cuộc gọi đến argument1 với chức năng, như:

=CODE.returnArg(Parameters!Parameter1.Value) 

Bây giờ trong trường hợp này argument2 chỉ đơn giản là hiển thị các giá trị trong argument1, nhưng logic này có thể được mở rộng đến phức tạp hơn biểu thức và nhiều tham số. Miễn là có một cuộc gọi hàm CODE.returnArg (...) cho mỗi tham số trong biểu thức, SSRS sẽ luôn làm mới giá trị.

0

@ Liên kết thứ hai của Abbi không còn giá trị. Hiện tại, bạn có thể tìm thấy bài viết tại: http://www.optimusinfo.com/multilevel-cascading-select/

Thật không may là hình ảnh bị hỏng và bài viết hơi không hoàn chỉnh nếu không có chúng. Có một hình ảnh tôi có thể xác định vị trí trong vị trí đã di chuyển của nó (tôi không thể tìm thấy những người khác ngay cả khi thử các biến thể thích hợp): http://www.optimusinfo.com/wp-content/uploads/2012/07/Multilevel-Cascading-with-Select-All-18.jpeg

Điều này đã cho tôi manh mối cuối cùng tôi cần để có được kỹ thuật làm việc: khi bạn thiết lập thuộc tính tập dữ liệu tham số, bạn cần chỉ định giá trị tham số theo cách thủ công như ví dụ [@ City.Label] thay vì đồng bằng thông thường cũ [@City] (tương ứng với [@ City.Value].

Điều này là do kỹ thuật thay đổi "Giá trị" thành giá trị tùy chỉnh không còn có thể là nhìn lên trong DB! Vì vậy, bạn cần phải sử dụng "Label" thân thiện với người dùng, như là tham số. (Có lẽ nên rõ ràng nhưng ...) Phần còn lại là tất cả các tiêu chuẩn nếu bạn hiểu trình tạo báo cáo. Ngoài ra, nó có thể dễ dàng được sửa đổi để làm như vậy: chỉ cần thay đổi các tham số được lưu trữ procs để tham gia vào một chức năng tách giá trị.Tôi đã điều chỉnh của tôi từ udf_splitvarible chức năng được cung cấp tại SQL Server - In clause with a declared variable

Sửa đổi khá đơn giản nhưng tôi sẽ đưa ra một ví dụ. Đây là từ bài viết (với định dạng khủng khiếp cố định).

SELECT 
    l11.CompanyName1+'_'+ CAST(row_number() over(order by l11.CompanyName1 desc) AS VARCHAR(50))as CompanyName11 
    ,l11.CompanyName 
FROM 
(
    SELECT 
     l1.CompanyName+'_'+ CAST(row_number() over(order by l1.CompanyName asc) AS VARCHAR(50))as CompanyName1 
     ,l1.CompanyName 
    FROM 
    (
     SELECT DISTINCT CompanyName 
     FROM Customers 
     WHERE City IN(@City) 
    )l1 
)l11 
ORDER BY l11.CompanyName ASC 

Thay đổi:

SELECT DISTINCT CompanyName 
FROM Customers 
WHERE City IN(@City) 

tới:

SELECT DISTINCT CompanyName 
FROM Customers 
INNER JOIN udf_SplitVariable(@City,',') v ON City = v.Value 

này tất cả áp dụng cho SQL Server 2008/Report Builder 3 cũng có.

Tôi không thể hiểu/áp dụng câu trả lời @ borkmark. Những hạn chế dường như không áp dụng cho trường hợp của tôi.

+0

Tôi sẽ chào đón bất cứ ai có thể giải thích tại sao việc sắp xếp ASC/DESC kép là cần thiết hoặc nếu nó có thể bị tước bỏ. Đã không có thời gian rảnh rỗi dành cho nó. – Visser

0

Dưới đây tôi sẽ trình bày một kịch bản chi tiết và sau đó tôi sẽ hiển thị việc triển khai ví dụ dựa trên câu trả lời của Visser và Abbi.

Hãy tưởng tượng rằng tôi có báo cáo trong đó mỗi hàng là một dự án. Dự án có cột Trạng thái với các giá trị "Đang tiến hành" hoặc "Hoàn thành" và cột Trình quản lý dự án có giá trị là tên của một người. Dưới đây là các hàng trong bảng:

  • Project A (Status = Trong Progress, Project Manager = Bob)
  • Dự án B (Status = Trong Progress, Project Manager = Tom)
  • Dự án C (Status = Hoàn, Giám đốc Dự án = Jack)
  • Dự án D (Status = Hoàn, Giám đốc dự án = Tom)
  • dự án E (Status = Hoàn, Giám đốc Dự án = Jill)

Tôi muốn có 2 tham số trong báo cáo của tôi

  1. Hiển thị các dự án đã hoàn thành? - Đây là một tham số boolean
    • Khi false sẽ chỉ hiển thị "Đang tiến hành" dự án Một & B
    • Khi true sẽ hiển thị "Đang tiến hành" dự án Một & B, thêm vào dự án "Hoàn thành" C, D , & E.
  2. Quản lý dự án - Đây là một tham số văn bản đa giá trị có tùy chọn và giá trị mặc định sẽ cần phải thay đổi dựa trên hiện dự án đã hoàn thành? thông số mà nó phụ thuộc.
    • Nếu Hiển thị các dự án đã hoàn thành? được đặt thành false thì chỉ có tùy chọn "Bob" và "Tom" mới hiển thị vì chúng là người quản lý dự án cho các dự án đang tiến hành Dự án A & B tương ứng.
    • Nếu Hiển thị các dự án đã hoàn thành? được đặt thành true sau đó ngoài "Bob" và "Tom", bạn cũng sẽ có "Jack" và "Jill" hiển thị dưới dạng tùy chọn vì chúng là người quản lý dự án cho các dự án không hoạt động Project C & Project E tương ứng.

Bây giờ cho việc thực hiện:

  1. Hiện dự án đã hoàn thành? tham số

    Show Completed Projects Parameter

  2. quản lý dự án truy vấn dữ liệu (Xem Visser và Abbi của câu trả lời để biết chi tiết về cách thức này sẽ tạo ra một chìa khóa mà sẽ thay đổi dựa trên các thông số độc lập và sẽ buộc SSRS để tải lại các giá trị mặc định)

    SELECT 
        [ProjectManager_Key] = 
         pOuterAlias.[ProjectManager_Key] + '_' + 
         CAST(ROW_NUMBER() OVER(ORDER BY pOuterAlias.[ProjectManager_Key] DESC) AS NVARCHAR(MAX)), 
        [ProjectManager] = pOuterAlias.[ProjectManager] 
    FROM 
        (
         SELECT 
          [ProjectManager_Key] = 
           pInnerAlias.ProjectManager + '_' + 
           CAST(ROW_NUMBER() OVER(ORDER BY pInnerAlias.ProjectManager ASC) AS NVARCHAR(MAX)), 
          [ProjectManager] = pInnerAlias.ProjectManager 
         FROM 
         (
          SELECT 
           [ProjectManager] 
          FROM 
           [dbo].[Project] 
          WHERE 
           Status = 'In Progress' OR 
           @ShowCompletedProjects = 1 
         ) pInnerAlias 
        ) pOuterAlias 
    ORDER BY 
        pOuterAlias.[ProjectManager] 
    
  3. Quản lý dự án tham số

    • chung

      Project Manager General

    • giá trị có sẵn

      Project Manager Available Values

    • giá trị mặc định

      Project Manager Default Values

  4. Dự án dataset

    • Query

      SELECT 
          * 
      FROM 
          [dbo].[Project] 
      WHERE 
      (
          Status = 'In Progress' OR 
          @ShowCompletedProjects = 1 
      ) AND 
      Project Manager IN (@ProjectManager) 
      
    • Parameters (Hãy chắc chắn rằng cần lưu ý phần [@ProjectManager.Label] mà sẽ làm cho nó phù hợp với dự án trên giá trị quản lý dự án thực tế từ cơ sở dữ liệu và không phải là chìa khóa mà chúng tôi tạo ra.

      Projects parameters

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