[英]case statement filter in MDX query
我想在MDX中编写以下T SQL查询
Select count(bugs),priority from table
where
Case when priority =1 then startdate< dateadd(dd,-7,getdate())
when priority =2 then startdate< dateadd(dd,-14,getdate())
end
group by priority
尝试了以下内容,但不起作用
WITH MEMBER [Measures].CHECKING
AS
CASE [Item].[ startdate].CurrentMember
WHEN [Item].[ Priority].&[1] THEN [Item].[startdate]<DATEADD(DAY,-7,NOW())
WHEN [Item].[ Priority].&[2] THEN [Item].[startdate]<DATEADD(DAY,-14,NOW())
END
SELECT
NON EMPTY{[Measures].[Count], [Measures].CHECKING }ON COLUMNS
,NON EMPTY{([Item].[ Priority].[ Priority].ALLMEMBERS )}
我是MDX查询的新手,请提供有关如何解决此问题的任何建议。
您的CASE逻辑有一个基本问题。 该语句不能导致条件。 它只能产生一个值,然后将其与其他值进行比较。
以您的tSQL示例为例,我认为它应该像这样:
Select count(bugs),priority from table
where
1 = Case when priority = 1 and startdate< dateadd(dd,-7,getdate()) Then 1
when priority = 2 and startdate< dateadd(dd,-14,getdate()) then 1
else 0 end
group by priority
编写此代码的更干净的方法是完全跳过CASE。
Select count(bugs),priority from table
where
(priority = 1 and startdate< dateadd(dd,-7,getdate()))
or
(priority = 2 and startdate< dateadd(dd,-14,getdate()))
group by priority
我假设以下内容:
startdate
层级是属性层次结构,而不是用户层次结构和 然后,以下MDX应该可以提供您想要的:
SELECT
{ [Measures].[Count] }
ON COLUMNS
,
{ [Item].[ Priority].&[1], [Item].[ Priority].&[2] }
ON ROWS
FROM (
SELECT ({ [Item].[ Priority].&[1] }
*
([Item].[ startdate].[ startdate].Members
- Tail([Item].[ startdate].[ startdate].Members, 7)
)
)
+
({ [Item].[ Priority].&[2] }
*
([Item].[ startdate].[ startdate].Members
- Tail([Item].[ startdate].[ startdate].Members, 14)
)
)
ON COLUMNS
FROM [yourCube]
)
您的代码[Item].[startdate]<DATEADD(DAY,-7,NOW())
在MDX中不起作用,原因如下:首先, [Item].[startdate]
是一个层次结构,因此无法使用<
。 其次,即使您将其重新声明为[Item].[startdate].CurrentMember < DATEADD(DAY,-7,NOW())
,您也会在<
的左侧拥有一个成员,并且有一个date,即在右侧的值。 MDX要记住的重要事情之一是不同类型的对象:层次结构,级别,成员,元组,集合。 所有这些都不是价值。 您不仅拥有像SQL中那样的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.