Sql server 2012 如何通过OLAP多维数据集公开每月的总天数

Sql server 2012 如何通过OLAP多维数据集公开每月的总天数,sql-server-2012,ssas,mdx,olap,Sql Server 2012,Ssas,Mdx,Olap,我想要一个简单的方法来获取date维度中每个月的总天数 目前,我们的多维数据集中未公开此信息。因此,我需要编写定制的mdx,如下所示: WITH SET [13Mth] AS Tail([Date].[Date - Calendar Month].[Calendar Month].MEMBERS ,13) SET [m] AS Tail([13Mth]) MEMBER [Measures].[TotalNumDaysMth] AS Datepart ("D",

我想要一个简单的方法来获取date维度中每个月的总天数

目前,我们的多维数据集中未公开此信息。因此,我需要编写定制的
mdx
,如下所示:

WITH 
  SET [13Mth] AS Tail([Date].[Date - Calendar Month].[Calendar Month].MEMBERS ,13) 
  SET [m] AS Tail([13Mth]) 
  MEMBER [Measures].[TotalNumDaysMth] AS 
    Datepart
    ("D",
        Dateadd
        ("M",1,
          Cdate(Cstr(VBA!Month([m].Item(0).Item(0).Lag(1).Name)) + "-01-" + Cstr(VBA!Year([m].Item(0).Item(0).Lag(1).Name)))
        )
      - 1
    ) 
  MEMBER [Measures].[TotalNumDaysMth-1] AS 
    Datepart
    ("D",
        Dateadd
        ("M",1,
          Cdate(Cstr(VBA!Month([m].Item(0).Item(0).Lag(1).Name)) + "-01-" + Cstr(VBA!Year([m].Item(0).Item(0).Lag(1).Name)))
        )
      - 1
    ) 
我不相信我们的用户会在我们的多维数据集浏览客户端中需要这些信息,但从开发人员的角度来看,我可以不必始终实现上述功能


我们应该使用什么方法使上述数据更容易获得?

我总是在日期维度“月内天数”中添加一个integer类型的属性。如果不想向用户公开属性层次结构,可以隐藏此属性

但是你仍然可以在计算中使用

所以我的建议是给你的时间维度添加一个适当的属性,并根据这些属性计算时间维度


希望这能有所帮助。

我假设在您的开发场景中,月份将来自Web服务/前端/SSRS报告等。在任何此类情况下,您都可以创建一个将返回计数的度量

方法1:存在年-季-月日期

建立类似的层次结构是一种很好的做法。以下MDX将起作用:

with set CurrentMonth as
[Date].[Year-Quarter-Month-Date].currentmember

set DatesInCurrentMonth as
descendants(abc, [Date].[Year-Quarter-Month-Date].[Date])

member [Measures].countofdaysinmonth as
count(DatesInCurrentMonth)

select measures.CountOfDaysInMonth on 0
from [MyCube]
where [Date].[Year-Quarter-Month-Date].[Month].&[Feb-2004]
方法2:这种层次结构不存在

with set CurrentMonth as
[Date].[Month].currentmember

set DatesInCurrentMonth as
exists([Date].[Date].children, abc, "<<Any Measure group>>")

member measures.countofdaysinmonth as
count(DatesInCurrentMonth)

select measures.countofdaysinmonth on 0
from [MyCube]
where [Accident Date].[Month].&[Feb-2004]
将CurrentMonth设置为
[日期][月份].当前成员
将DatesInCurrentMonth设置为
存在([Date][Date].子项,abc,“”)
成员度量值。日数月份为
计数(日期当前月)
选择0上的measures.countofdaysinmonth
来自[MyCube]
其中【事故日期】【月份】和【2004年2月】

让我知道他们是否工作/有问题。

你好,苏拉夫,有几个问题1.某些日期可能没有结果2.对于当前月份,未来日期不在多维数据集中。为什么不在多维数据集中设置未来日期?这是任何日期维度的标准特性。哪种情况可能不会产生结果?为什么?例如,如果在12月26日,所有度量值都为空,那么您的代码将在12月返回30天?不确定为什么将来的日期应该是标准的-这是一个设计问题:我认为没有这些日期的多维数据集看起来有点整洁。(尽管补充了您的答案-感谢您的努力)在这种情况下,为什么不在多维数据集的日期维度中添加一个包含这些信息的派生列呢。所以答案显示了如何计算给定日期的时间。你必须调整它来计算每个月的数据。嗨,苏拉夫-正是伙计。我不是多维数据集的开发人员,但已经向开发人员发送了一个请求。感谢您的帮助,因为我需要确认我的OP中的代码是当前我的最佳选择,除非将属性添加到多维数据集中。我认为公平地说,我们最终同意了@TomMartens的答案。