如何在mdx中执行“事件平均天数”类型查询?

时间:2012-07-27 19:36:35

标签: ssas mdx moving-average weighted-average

我有一个过去的立方体,用于报告事件的数量。让我们说7月份我想要分解每种产品发生的事件数量。

我会有这样的事情:

SELECT Measures.[Count] ON COLUMNS,
    Product.[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

输出如:

        Count
Car     5
Train   6

现在我想修改输出以得到这样的结果:

        Count   Avg Days since sale
Car     5       12
Train   6       14

我该怎么做?

我花了几个小时试图在MDX中找到解决方案,但找不到办法做到这一点。 (我对MDX很新)

如果我在COLUMNS或ROWS中包含几天,我发现了几种可行的解决方案。 例如:

WITH MEMBER Measures.[NumDays] as
    count([Time].[Date].CurrentMember :
        [Time].[Date].&[2012-07-27T00:00:00])
SELECT
    ([Time].[Date].Members,{Measures.[Count],Measures.[NumDays]}) ON COLUMNS,
    [Product].[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

这让我非常接近。结果如下:

        July 1                July 2                ...
        Count    Num Days     Count    Num Days     ...
Car     1        24           3        23
Train   0        24           1        23

我可以使用这个结果集并在我的.NET代码中得到我想要的东西。我可以用加权平均数计算出售后的平均天数 例如,对于汽车来说,它将是(1*24 + 3*23)/(1 + 3)。我必须在我的.NET代码中做一些破坏和不幸的事情才能使它工作,而且我还必须从服务器发回大约80倍的数据。

我在使用MDX时遇到的问题是,一旦我从结果集中删除[Time].[Date].Members[Time].[Date].CurrentMember就是[Time].[Date].All,我就无法做到有意义的计算。

有没有办法将第二个MDX用作子查询,并按照我需要的方式汇总它返回的值?

我的解决方案不需要子查询方法,但我很好奇是否可以这样做。任何帮助,将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Sum功能:

WITH MEMBER [Measures].[NumDays] AS
    Count([Time].[Date].CurrentMember :
        [Time].[Date].&[2012-07-27T00:00:00])
MEMBER [Measures].[avg] AS Sum([Time].[Date].Members, Measures.[Count] * [Measures].[NumDays])/ Sum([Time].[Date].Members, Measures.[Count])
SELECT
    {[Measures].[avg]} ON COLUMNS,
    [Product].[Product Id].Members ON ROWS
FROM [MyCube]
WHERE [Time].[Month].[July 2012]

从第二个查询中删除[Time].[Date].Members时,层次结构中保留为[Time].[Date]的当前成员是默认成员(即所有成员)。