MDX - 返回空值的计算 MTD 度量
MDX - Calculated MTD measure returning null value
我有一个具有日期维度层次结构(年、学期、季度、月、日)的多维数据集。
数据仓库中有 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 字段,这样当业务 select 其切片器上的特定日期 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 中使用新计算的度量,他们希望 select 任何日期并能够查看该月的 MTD 值。
还有人可以帮助进行方法 (1) 和 (2) 的 MDX 查询吗?
非常感谢您的帮助。
我认为您引用的代码(方法 2)的问题在于 [Date].[Financial].CurrentMember 的级别必须等于或低于 [Date].[Financial].[Month] 级别。否则 PeriodsToDate returns 一个空集。
所以问题不在您的计算成员定义中,而是在使用它的查询中的某个地方。在该查询中,[Date].[Financial].CurrentMember 可能会返回高于 Months 级别的成员。不看查询本身就很难看出来。
方法(1)比较繁琐。您可以使用
获取上个月的最后一天
Ancestor([Date].[Financial].CurrentMember,[Date].[Financial].[Month]).PrevMember.LastChild
但是您必须为财政年度第一个月的天数建立一些逻辑,否则会从今年的 YTD 值中减去上一个财政年度的值。所以我推荐方法(2)。
据我所知,select在 Excel 切片器中输入日期(我指的是日期,而不是月份)将使该日期成为 .CurrentMember。我有点犹豫,因为 Excel 有时确实会生成一些非常奇怪的 MDX。
编辑: 另一个可能的问题是层次结构不匹配。您可以在日期层次结构中 select 一个完美的日期,但如果它不在您在计算成员定义中指定的层次结构中,您可能会得到奇怪的结果。恕我直言,较新版本的 SSAS 鼓励属性层次结构和多个 "real" 层次结构的扩散,使这成为一个真正的问题。
作为测试,您能否添加这个非常简单的措施来确保当前成员的行为符合预期:
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS [Date].[Financial].CurrentMember.member_caption
如果当你使用上面的所有内容时它 returns 是 All
成员那么你就知道出了问题。
您需要仔细检查日期层次结构中使用的关系和数据类型,因为这通常是时间计算问题的原因。
这是您的措施的替代方案,但我怀疑如果原始脚本不起作用,那么这也不会...
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS SUM
(
MTD([Date].[Financial].CurrentMember)
, [Measures].[AUD DLY]
)
我有一个具有日期维度层次结构(年、学期、季度、月、日)的多维数据集。
数据仓库中有 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 字段,这样当业务 select 其切片器上的特定日期 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 中使用新计算的度量,他们希望 select 任何日期并能够查看该月的 MTD 值。
还有人可以帮助进行方法 (1) 和 (2) 的 MDX 查询吗?
非常感谢您的帮助。
我认为您引用的代码(方法 2)的问题在于 [Date].[Financial].CurrentMember 的级别必须等于或低于 [Date].[Financial].[Month] 级别。否则 PeriodsToDate returns 一个空集。
所以问题不在您的计算成员定义中,而是在使用它的查询中的某个地方。在该查询中,[Date].[Financial].CurrentMember 可能会返回高于 Months 级别的成员。不看查询本身就很难看出来。
方法(1)比较繁琐。您可以使用
获取上个月的最后一天Ancestor([Date].[Financial].CurrentMember,[Date].[Financial].[Month]).PrevMember.LastChild
但是您必须为财政年度第一个月的天数建立一些逻辑,否则会从今年的 YTD 值中减去上一个财政年度的值。所以我推荐方法(2)。
据我所知,select在 Excel 切片器中输入日期(我指的是日期,而不是月份)将使该日期成为 .CurrentMember。我有点犹豫,因为 Excel 有时确实会生成一些非常奇怪的 MDX。
编辑: 另一个可能的问题是层次结构不匹配。您可以在日期层次结构中 select 一个完美的日期,但如果它不在您在计算成员定义中指定的层次结构中,您可能会得到奇怪的结果。恕我直言,较新版本的 SSAS 鼓励属性层次结构和多个 "real" 层次结构的扩散,使这成为一个真正的问题。
作为测试,您能否添加这个非常简单的措施来确保当前成员的行为符合预期:
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS [Date].[Financial].CurrentMember.member_caption
如果当你使用上面的所有内容时它 returns 是 All
成员那么你就知道出了问题。
您需要仔细检查日期层次结构中使用的关系和数据类型,因为这通常是时间计算问题的原因。
这是您的措施的替代方案,但我怀疑如果原始脚本不起作用,那么这也不会...
CREATE MEMBER CURRENTCUBE.[Measures].[AUD MTD]
AS SUM
(
MTD([Date].[Financial].CurrentMember)
, [Measures].[AUD DLY]
)