我有一个具有日期维度层次结构的多维数据集(年,学期,季度,月,日)。
数据仓库中有两种可用的措施。
[AUD DLY] : Daily numbers
[AUD YTD] : Daily incremental YTD numbers
层次结构如下
Date - Dimension
Financial - Hierarchy
Year - [Date].[Financial].[Year]
Semester - [Date].[Financial].[Semester]
Quarter - [Date].[Financial].[Quarter]
Month - [Date].[Financial].[Month]
Day - [Date].[Financial].[Day]
Measures [AUD DLY]
Measures [AUD YTD]
我需要在度量中添加一个MTD字段,以便当企业在例如2016年3月3日的excel切片器中选择特定日期时,MTD应按以下方式之一计算:
1) [AUD MTD] should be calculated by subtracting [AUD YTD] on
last day of previous month from the current selected date.
So if we select 3 March 2016 then
[AUD MTD] = [AUD YTD] on 3 March 2016 - [AUD YTD] on 29 Feb 2016
OR
2) [AUD MTD] should be calculated by adding the [AUD DLY] from first day
of the current month until the selected date in that month.
So if we select 3 March 2016 then
[AUD MTD] = SUM ([AUD DLY] from 1 March 2016 to 3 March 2016)
我在BIDS 2010的多维数据集设计器的“计算”选项卡中创建了一个新计算成员。下面是MDX查询。但是,当我尝试浏览多维数据集时,[AUD MTD]值仅返回空值。
有人可以帮助我做错了吗?
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS Aggregate
(
PeriodsToDate
(
[Date].[Financial].[Month]
,[Date].[Financial].CurrentMember
)
,[Measures].[AUD DLY]
),
FORMAT_STRING = "Currency",
NON_EMPTY_BEHAVIOR = { [AUD DLY] },
VISIBLE = 1 , DISPLAY_FOLDER = 'AUD Values' , ASSOCIATED_MEASURE_GROUP = 'Measures' ;
此外,企业将使用切片器在Excel中使用新的计算度量,他们希望选择任何日期并能够查看该月的MTD值。
还有人可以帮助MDX查询方法(1)和(2)吗?
非常感谢您的帮助。
答案 0 :(得分:0)
我认为引用代码(方法2)的问题是[日期]。[财务] .CurrentMember必须处于或低于[日期]。[财务]。[月]级别。否则PeriodsToDate返回一个空集。
因此,问题不在于您计算出的成员定义中,而是在查询中的某个位置使用它。在该查询中,[日期]。[财务] .CurrentMember可能会返回几个月以上级别的成员。没有看到查询本身就很难看到。
方法(1)更加繁琐。您可以使用
获取上个月的最后一天Ancestor([Date].[Financial].CurrentMember,[Date].[Financial].[Month]).PrevMember.LastChild
但是你必须在财政年度的第一个月内建立一些逻辑,否则将从今年的年初至今减去前一年的价值。所以我推荐方法(2)。
据我所知,在Excel切片器中选择日期(我的意思是日期,而不是一个月)会使该日期成为.CurrentMember。我有点犹豫,因为Excel确实会产生一些非常奇怪的MDX。
编辑:另一个可能的问题是层次结构不匹配。您可以在日期层次结构中选择一个非常好的日,但如果它不在您在计算的成员定义中指定的层次结构中,则可能会得到奇怪的结果。恕我直言,更新版本的SSAS鼓励增加属性层次结构和多个"真实"层次结构,使这成为一个真正的问题。
答案 1 :(得分:0)
作为测试,您可以添加这个非常简单的措施,以确保当前成员的行为符合预期:
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS [Date].[Financial].CurrentMember.member_caption
如果您使用上述所有内容时返回的是All
成员,那么您就知道出现了问题。
您需要仔细检查日期层次结构中使用的关系和数据类型,因为这通常是时间计算问题的原因。
这是你的措施的替代方案,但我怀疑原始剧本是否不起作用,那么这也不会......
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS SUM
(
MTD([Date].[Financial].CurrentMember)
, [Measures].[AUD DLY]
)