2013-01-10 60 views
7

我需要为日期过滤的Mondrian MDX查询,其中一个或两个边界日期可能不存在。只要存在2013-01-01和2013-01-08维度,我就会使用下面的查询。如果两个日期中的一个不存在,那么即使中间的维数确实存在,它也不会返回结果。即使在缺少边界日期维度的情况下,我如何使此查询正常工作?带有缺失边界日期的MDX日期范围查询

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

是您的维简或单独的表?如果它是一个单独的表,则通常会预填充,因此您可以确保所有维度都存在..(即使没有相关的事实)。样本文件夹中有一个PDI Kettle转换用于生成日期维度。 – Codek

回答

1

MDX是建立与每一位成员说,假设你是指存在;那么最好是确保所有可能的日期维度成员存在与一个单独的表与这些值预先计算。

您可能会变得棘手,并将该表作为存储过程来实现,但日期维度并不占用大型事物中的大量空间,因此您几乎不会这样做。

我不知道有任何其他方式来解决您的问题。

0

设法消除非EMPTY

0

即使我还没有理解执行这一逻辑的理由,你可以通过添加隐藏这一点。如果您在Mondrian中添加自定义成员,请尝试它。

/* 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' ; 

您也可以使用IIF(ISERROR或IIF执行(已存在MDX功能。