2011-11-11 26 views
13

Với số liệu này:Làm thế nào để kết hợp uẩn trong một nhóm với uẩn giữa các nhóm trong SSRS

Category | Amount 
A  | 5 
A  | 3 
B  | 6 
B  | 2 
B  | 1 
C  | 7 

Tôi muốn tạo ra một tablix nhóm trên các loại, hiển thị tỷ lệ phần trăm của tổng số tiền:

Category | Percentage 
A  | 33% 
B  | 38% 
C  | 29% 

mà phải là một phép tính đơn giản:

Category | Percentage 
A  | ((Sum of Amount within group/Sum of Amount across groups) * 100)% 
B  | ((Sum of Amount within group/Sum of Amount across groups) * 100)% 
C  | ((Sum of Amount within group/Sum of Amount across groups) * 100)% 

Nhưng tôi không thể tìm ra cách để làm điều đó trong vòng Re cổng thiết kế (SSRS) - bất cứ khi nào tôi tạo một nhóm hàng trên Category, tôi có thể nhận được tổng trong nhóm với =Sum(Fields!Amount.Value). Nhưng làm thế nào để có được số tiền trên các nhóm từ một tế bào trong nhóm?

Trả lời

26

Tôi sẽ trả lời câu hỏi của riêng mình.

Từ bên trong mọi biểu thức, bạn có thể thực hiện tra cứu trong tất cả các tập dữ liệu. Thông qua cách này, chúng ta sẽ nhận được các dữ liệu:

LookupSet(SourceFieldToCompare, TargetFieldToCompare, ResultField, DataSet) 

Bây giờ, chúng ta hãy nâng cao thanh cho câu hỏi và nói những dữ liệu được nhóm lại trong chưa một không gian khác, tháng - như thế này:

Category | January | February | March 
A  | 33%  | 37%  | 35% 
B  | 38%  | 36%  | 37% 
C  | 29%  | 27%  | 28% 

Say tập dữ liệu được đề cập trong câu hỏi được đặt tên là 'danh mục'. Bây giờ, hãy gọi trên LookupSet function (Reference):

LookupSet(Fields!Month.Value, Fields!Month.Value, Fields!Amount.Value, "categories") 

(ghi nhớ rằng người đầu tiên "tháng" được liên kết với các tập dữ liệu bên trong tablix, và lần thứ hai "Tháng" trong đối số thứ hai là "Tháng "từ tập dữ liệu" danh mục "!)

Vẫn còn một vấn đề: LookupSet trả lại Object loại, trong đó Sum sẽ không ăn. Bạn cần phải sử dụng một tập hợp tùy chỉnh, (mã tùy chỉnh được thêm vào trong "Báo cáo Properties"): (Source)

Function SumLookup(ByVal items As Object()) As Decimal 
    If items Is Nothing Then 
    Return Nothing 
    End If 

    Dim suma As Decimal = New Decimal() 
    suma = 0 

    For Each item As Object In items 
    suma += Convert.ToDecimal(item) 
    Next 

    Return suma 
End Function 

Bây giờ, bằng cách gọi Code.SumLookup trên LookupSet chức năng tổng được tính toán của tất cả các lĩnh vực.

+3

+1 Nghiêm túc điều này đã khiến tôi phát điên - tại sao trên trái đất họ sẽ cung cấp cho bạn hàm LookupSet không hoạt động với Sum agg! –

2

Bạn có thể đã sử dụng Phạm vi mô tả để xác định các nhóm rằng SUM là được chạy chống lại:

  • loại nhóm được định nghĩa trong nhóm tablix Row.
  • DataSet1 là tên của tập dữ liệu.

Xử lí Amount: [Sum (Amount)]

Dataset Tổng số: SUM (Fields Amount.Value, "DataSet1"!)

chiếm tỷ lệ:! SUM (Fields Amount.Value, "Thể loại ") /SUM(Fields!Amount.Value," DataSet1 ")

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