获取一个月内的天数 - mdx

时间:2015-06-09 23:56:33

标签: sql-server tsql mdx cube

在TSQL中我可以这样做以获得某个月的天数:

declare @date as datetime
set @date = '2015-02-06'
select datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date))) 

如何在MDX中获得相同的功能? 附:我需要结果是一个int。

2 个答案:

答案 0 :(得分:3)

如果你有一个年 - 月 - 日期层次结构,可以用以下方式完成:

WITH MEMBER NumOfDaysInMonth AS
DateDiff(       
            "d",
             HEAD(DESCENDANTS([Date].[Calendar Date].CURRENTMEMBER, 1)).ITEM(0).MEMBER_CAPTION, //Gets the first date of the month
             TAIL(DESCENDANTS([Date].[Calendar Date].CURRENTMEMBER, 1)).ITEM(0).MEMBER_CAPTION  //Gets the last date of the month
        ) + 1

您只需要在切片器中传递月份值。计算出的成员将完成剩下的工作。

SELECT NumOfMonths ON 0
FROM [YourCube]
WHERE ([Date].[Calendar Date].[Month].&[Dec-2015])

答案 1 :(得分:0)

这是我们使用的方法:

WITH 
  MEMBER [MEASURES].[NumOfDaysInMonth] AS 
    IIF
    (
      VBA!Isdate([Date].[Calendar].CurrentMember.Name)
     ,Datepart
      ("D"
       ,
          Dateadd
          ("M"
           ,1
           ,Cdate
            (
                Cstr(VBA!Month([Date].[Calendar].CurrentMember.Name)) + "-01-"
              + 
                Cstr(VBA!Year([Date].[Calendar].CurrentMember.Name))
            )
          )
        - 1
      )
     ,''
    ) 
SELECT 
  NON EMPTY 
    {[MEASURES].[NumOfDaysInMonth]} ON 0
 ,NON EMPTY 
    {
      [Date].[Calendar].[All]
     ,[Date].[Calendar].[Calendar Year].&[2005]
     ,[Date].[Calendar].[Calendar Semester].&[2008]&[2]
     ,[Date].[Calendar].[Month].&[2006]&[3]
     ,[Date].[Calendar].[Date].&[20060214]
     ,[Date].[Calendar].[Month].&[2007]&[11]
    } ON 1
FROM [Adventure Works];

以上内容将返回以下内容:

enter image description here