【问题标题】:How to get MDX openingperiod() to work as calculated measure in ssas cube如何让 MDX openingperiod() 作为 ssas 多维数据集中的计算量度工作
【发布时间】:2019-08-20 08:43:00
【问题描述】:

我想在我们的多维数据集中使用 MDX 函数 openingperiod() 和 closingperiod(),但无法使其正常工作。

这真的可能吗,还是这些功能仅适用于 MDX 查询?

我用来了解openingperiod()的主要两篇文章是: https://www.sqlservercentral.com/steps/stairway-to-mdx-level-12-mdx-timedate-series-functions-openingperiod-and-closingperiod-functions

https://docs.microsoft.com/en-us/sql/mdx/openingperiod-mdx?view=sql-server-2017

在上述文档中,openperiod() 和 closingperiod() 这两个函数只在查询中使用,但我想将它们集成到多维数据集中。

我用作常规查询的代码是:

sum(
openingperiod
    (
    [Date Booking].[Year Month],
    [Date Booking].[Year Month].currentmember
    ),
    [Measures].[Goods Amount])

结果应该是月初的商品数量,结果却是NULL

我使用sum 来获得指向正确成员的有效语法。

【问题讨论】:

    标签: visual-studio ssas mdx cube


    【解决方案1】:

    我将尝试从 Adventure Works 示例数据库中为您提供想法。

    这应该是在多维数据集中创建计算成员的语法([Adventure Works] 是本示例中的多维数据集名称),因此您可以稍后调用它:

    create member [Adventure Works].Measures.MyMeasure4
    as
    (OpeningPeriod([Date].[Calendar].[Date],[Date].[Calendar].Currentmember.Parent), [Measures].[Internet Sales Amount]) 
    

    然后你应该这样调用它来查看结果:

    select {Measures.MyMeasure4, [Measures].[Internet Sales Amount]} on 0,
    [Date].[Calendar].members on 1
    from [Adventure Works]
    

    因此,对于 1 月,MyMeasure4 将具有 1 月 1 日成员的值(开放期间的值),2 月它将具有从 2 月 1 日开始的值,如果这是您的意图。

    【讨论】:

    • 似乎它正在工作,但我在我期望一个值的地方返回了错误。 [Date Booking].[Year Month] 需要是数字吗?现在是例如2019 年 - 1 月
    • 没有。 OpeningPeriod 函数的第一个参数是 Level,所以 [Date Booking].[Year Month] 应该是你的立方体中的级别名称,你应该先检查一下。它应该是这样的:OpeningPeriod([DimensionName].[HierarchyName].[LevelName], [DimensionName].[HierarchyName].CurrentMember)
    • 错误消失了,但出现的空值也确实给出了预期的结果。仍在努力,但 MDX 对我来说是一门新语言,所以需要一些时间。
    • 我认为您给出了正确的答案,所有其他文档和论坛都这么说。它仍然对我不起作用,我开始相信多维数据集中的字段一定有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2016-06-07
    • 2012-01-03
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多