繁体   English   中英

MDX查询中的case语句过滤器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM