2013-01-10 50 views
7

Tôi cần truy vấn MDX cho Mondrian được lọc theo ngày, trong đó một hoặc cả hai ngày giới hạn có thể không tồn tại. Tôi đang sử dụng truy vấn bên dưới hoạt động miễn là cả hai tham số 2013-01-01 và 2013-01-08 đều tồn tại. Nếu một trong hai ngày không tồn tại thì nó sẽ không trả về kết quả nào, mặc dù các kích thước ở giữa tồn tại. Làm cách nào để truy vấn này hoạt động ngay cả trong trường hợp thứ nguyên ngày bị giới hạn bị thiếu?Truy vấn phạm vi ngày MDX có ngày giới hạn bị thiếu

SELECT 
NON EMPTY {Hierarchize({[Measures].[Number of Something]})} ON COLUMNS, 
NON EMPTY {[Date].[2013-01-01]:[Date].[2013-01-08]} ON ROWS 
FROM [Users] 
+0

là thoái hóa chiều hoặc một bảng riêng biệt? Nếu đó là một bảng riêng biệt thì thường nó sẽ được điền vào trước, do đó bạn có thể chắc chắn rằng tất cả các kích thước đều tồn tại .. (Thậm chí nếu không có sự kiện liên quan) Có một chuyển đổi PDI Kettle trong thư mục mẫu để tạo ra một chiều ngày tháng. – Codek

Trả lời

1

MDX được xây dựng với giả định rằng mọi thành viên mà bạn tham chiếu tồn tại; tốt nhất là để đảm bảo rằng tất cả các thành viên kích thước ngày có thể hiểu được làm tồn tại bằng cách có một bảng riêng biệt với các giá trị này được đặt trước.

Bạn có thể gặp khó khăn và triển khai bảng đó dưới dạng thủ tục được lưu trữ nhưng kích thước ngày không chiếm nhiều không gian trong sơ đồ lớn để bạn không bao giờ làm được điều này.

Tôi không biết cách nào khác để giải quyết vấn đề của bạn.

0

cố gắng loại bỏ NON EMPTY

0

Thậm chí tôi chưa hiểu lý do triển khai logic này, bạn có thể ẩn điều này bằng cách thêm. Nếu bạn thêm thành viên tùy chỉnh ở Mondrian, hãy thử nó.

/* Exclude Missing Member */ 
Create Set CurrentCube.[MissingMemberSet] As 
iif(IsError(StrToMember("[Dimension].[Hierarchy].&[MEMBER]")), 
{}, {[Dimension].[Hierarchy].&[MEMBER]}); 

Create Member CurrentCube.Measures.[Calculation on Missing Member] 
AS 
IIF ([MissingMemberSet].Count > 0, 
([Dimension].[Hierarchy].&[MEMBER],Measures.[X Measure]), 
0 
) 
, 
FORMAT_STRING = "Currency", 
LANGUAGE = 1033, 
NON_EMPTY_BEHAVIOR = { [X Measure] }, 
VISIBLE = 1 , DISPLAY_FOLDER = 'Display Folder' ; 

Ngoài ra, bạn có thể thực hiện trong việc sử dụng IIF (ISERROR hoặc IIF (Tồn tại chức năng MDX.