2017-08-14 35 views
8

Đây là một ứng dụng tự động đặt dữ liệu và hiển thị báo cáo.Truy vấn MDX trả về giá trị trong báo cáo nhưng không phải trong mã Visual Basic

Tôi có truy vấn MDX cho báo cáo dựa trên thông số. Truy vấn là:

SELECT NULL ON COLUMNS, strtomember(@DateYear) ON ROWS FROM [MYDATACUBE] 

Khi chạy điều này trong trình thiết kế truy vấn báo cáo, nó trả về giá trị đúng cách. Tuy nhiên, khi chạy nó trong mã cơ bản trực quan, nó không trả về gì cả. Đây là phần quan trọng trong mã của tôi:

Dim cn = New AdomdConnection(adomdparamconnectionstrings(countparamsadomd)) 
    Dim da As AdomdDataAdapter = New AdomdDataAdapter() 
    Dim cmd = New AdomdCommand(paramcommands(countparamsadomd), cn) 
    Dim tbl = New DataTable 

    If (adomdparams) Then 'If there are parameters, adds them to the query 
     For l As Integer = 0 To (countparamsadomd - 1) 
      If (adomdparamconnectionstrings(l) = "NODATASET") Then 
       Dim p As New AdomdParameter(paramvaradomd(l), paramadomd(l)) 
       cmd.Parameters.Add(p) 
      Else 
       Dim p As New AdomdParameter(paramvaradomd(l), adomdqueryvalues(l)) 
       cmd.Parameters.Add(p) 
      End If 
     Next 
    End If 

    da.SelectCommand = cmd 

    cn.Open() 
    da.Fill(tbl) 
    cn.Close() 

Tôi biết chuỗi kết nối hoạt động vì tất cả các bộ dữ liệu khác sử dụng cùng một bộ dữ liệu. Tôi biết lệnh là đúng bằng cách sử dụng điểm break. Tôi biết giá trị của tham số là đúng cũng sử dụng điểm break. Tôi biết mã tổng thể hoạt động bởi vì nó hoạt động với tất cả các dữ liệu tôi đã thử nghiệm nó với ngoại trừ này. Sử dụng các điểm ngắt, mọi thứ dường như hoạt động như đối với các tập dữ liệu khác, nhưng sau đó nó không trả về bất kỳ giá trị nào.

Bảng kết quả từ việc này có cột được đặt tên đúng ([Ngày]. [Năm]. [Năm]. [MEMBER_CAPTION]) nhưng không có hàng. Giá trị trả về phải là một hàng duy nhất có năm trong đó.

+0

You are not trả lại bất kỳ dữ liệu trên trục COLUMNS, ví dụ, 'CHỌN NULL ON COLUMNS'. Tôi đã cung cấp một ví dụ dưới đây trả về thuộc tính MEMBER_CAPTION của một thành viên tham số. – jhenninger

Trả lời

1

Tôi đã làm điều gì đó tương tự trong C#.

Nếu bạn có quyền truy cập vào kích thước và tên thứ bậc, sau đó bạn có thể có một truy vấn chung chung như thế này:

WITH 
    MEMBER [Measures].[Member Caption] AS StrToMember(@Hierarchy).HIERARCHY.CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 

Lưu ý rằng bạn sẽ phải thêm tham số, @Hierarchy, cho lệnh trước thực hiện truy vấn. Có một mẹo nhỏ trong biểu thức giá trị cho thành viên được tính toán. Khi chuyển biểu thức phân cấp tới StrToMember(), nó trả về thành viên mặc định từ phân cấp đó. Từ thành viên mặc định, bạn có thể sử dụng hàm HIERARCHY để làm việc ngược để có được cấu trúc phân cấp. Từ cấu trúc phân cấp, bạn có thể nhận được thuộc tính CURRENTMEMBER và MEMBER_CAPTION của nó.

Nếu bạn muốn có một truy vấn cụ thể cho các hệ thống cấp bậc trong ví dụ của bạn, bạn có thể sử dụng:

WITH 
    MEMBER [Measures].[Member Caption] AS [Date].[Year].CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 
+0

Rất tiếc, tôi không kiểm tra trang web này một lúc và không thấy câu trả lời của bạn. Cảm ơn một tấn, tôi sẽ cố gắng này và quay lại sau – ShadowShine57

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