2

我有一个具有日期维度层次结构(年、学期、季度、月、日)的多维数据集。

数据仓库中有 2 个可用的度量。

[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 字段,这样当企业在 Excel 中的切片器上选择特定日期时,例如 2016 年 3 月 3 日,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) 吗?

非常感谢您的帮助。

4

2 回答 2

1

我认为您引用的代码(方法 2)的问题在于 [Date].[Financial].CurrentMember 的级别必须等于或低于 [Date].[Financial].[Month] 级别。否则 PeriodsToDate 返回一个空集。

所以问题不在于您计算出的成员定义,而在于正在使用它的查询中的某个地方。在该查询中,[Date].[Financial].CurrentMember 可能会返回高于 Months 级别的成员。没有看到查询本身就很难看到。

方法(1)更加繁琐。你可以得到上个月的最后一天

Ancestor([Date].[Financial].CurrentMember,[Date].[Financial].[Month]).PrevMember.LastChild

但是你必须在财政年度的第一个月建立一些逻辑,否则会从今年的 YTD 值中减去上一个财政年度的值。所以我推荐方法(2)。

据我所知,在 Excel 切片器中选择一个日期(我的意思是一个日期,而不是一个月)将使该日期成为 .CurrentMember。我有点犹豫,因为 Excel 有时确实会生成一些非常奇怪的 MDX。

编辑:另一个可能的问题是层次结构不匹配。您可以在日期层次结构中选择一个非常好的日期,但如果它不是您在计算的成员定义中指定的层次结构,您可能会得到奇怪的结果。恕我直言,最近版本的 SSAS 鼓励属性层次结构和多个“真实”层次结构的扩散,这使得这成为一个真正的问题。

于 2016-05-04T09:55:53.823 回答
0

作为测试,您能否添加这个非常简单的措施以确保 currentmember 的行为符合预期:

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]
     )
于 2016-05-04T12:06:59.147 回答