使用MDX

我是MDX的新手,无法在Google上找到它。

我正在尝试获取一段时间内一组一致记录的平均价格(不包括该期间添加或删除的任何记录)。

我尝试了几种方法,但是一直碰壁,这是我的最新尝试,导致“检测到#Error无限递归。依存关系的循环是:平均每月价格(同一商店)->平均每月价格(相同商店)。

WITH
// Period Data
    MEMber [Date].[Date Id].PeriodCount AS
        COUNT([Date].[Period].&[2018-01-01T00:00:00] : [Date].[Period].&[2018-12-01T00:00:00])
    MEMber [Date].[Date Id].NonEmptyPeriodCount AS
        COUNT(
            NonEmpty(
                [Date].[Period].&[2018-01-01T00:00:00] : [Date].[Period].&[2018-12-01T00:00:00],[Measures].[Monthly Price]
            )
        )

// Calculations
    MEMber Measures.[Avg Monthly Price] AS [Measures].[Monthly Price] / [Measures].[Fact Monthly Price History Count]
    MEMber Measures.[Avg Monthly Price (Same Store)] AS 
        AGGREGATE(
            FILTER(
                [Product].[Product Id].MEMberS,[Date].[Date Id].NonEmptyPeriodCount = [Date].[Date Id].PeriodCount
            ),[Measures].[Monthly Price] 
        )
SELECT
    NON EMPTY {
        [Measures].[Avg Monthly Price],[Measures].[Avg Monthly Price (Same Store)]
    } ON COLUMNS,NON EMPTY (
        [Date].[Period].Children
    ) ON ROWS
FROM
    MyCube
WHERE
    [Date].[Year].&[2018]

我觉得这应该比我做起来容易得多……任何帮助将不胜感激。


编辑:

我要简单解决的问题是获取每个日期的平均值,不包括在整个报告期间添加或删除的任何记录。

例如,给定以下设置:

Record | 1/1/2019 | 2/1/2019 | 3/1/2019 | 4/1/2019 | 5/1/2019
1      | 9        | 10       | 11       | 12       | 13
2      |          |          | 22       | 23       | 24
3      | 10       | 11       | 12       | 13       | 14
4      | 20       | 21       | 22       |          |
5      | 11       | 12       | 13       | 14       | 15

我想排除记录2和4,因为它们在整个集合中都不存在,因此平均超时将受到添加或删除记录的影响。

对于以上设置,我想返回:

Period   | Avg.
1/1/2019 | 10
2/1/2019 | 11
3/1/2019 | 12
4/1/2019 | 13
5/1/2019 | 14
laoshu8688 回答:使用MDX

欢迎使用MDX,

更改查询中前两个度量的层次结构

  

成员[日期]。[日期ID] .PeriodCount

     

成员[日期]。[日期ID] .NonEmptyPeriodCount

MEMBER [Measures].PeriodCount

MEMBER [Measures].NonEmptyPeriodCount

现在在最后一项措施中引用它们

[Measures].PeriodCount = [Measures].NonEmptyPeriodCount
,

通过将“周期计数”度量添加到多维数据集,然后使用聚合成员,我能够使此工作正常进行,最终结果如下所示:

WITH
    MEMBER [Date].[Hierarchy].Dates AS
        AGGREGATE({
            [Date].[Hierarchy].[Period].&[2018-01-01T00:00:00],[Date].[Hierarchy].[Period].&[2018-02-01T00:00:00],[Date].[Hierarchy].[Period].&[2018-03-01T00:00:00],[Date].[Hierarchy].[Period].&[2018-04-01T00:00:00],[Date].[Hierarchy].[Period].&[2018-05-01T00:00:00],[Date].[Hierarchy].[Period].&[2018-06-01T00:00:00]
        })
    MEMBER AvgMonthlyPrice AS
        [Measures].[Monthly Price] / [Measures].[Monthly Price Count]
    MEMBER [Location].[Location Id].ValidLocation AS
        AGGREGATE(FILTER(EXISTING([Location].[Location Id].[Location Id]),([Measures].[Period Count],[Date].[Hierarchy].Dates) = 6))
SELECT
    {[Measures].[Monthly Price],[Measures].[Monthly Price Count],AvgMonthlyPrice,[Property Count]} ON COLUMNS,[Date].[Period].[Period] ON ROWS
FROM
    [MyCube]
WHERE
    (
        [Date].[Hierarchy].Dates,[Market].[Market Id].&[300000],[Location].[Location Id].ValidLocation
    )

执行此操作的方法可能更优雅,但这目前仍然有效。

本文链接:https://www.f2er.com/3080063.html

大家都在问