如何在SSAS / MDX查询的同一结果行中获取多个时间范围的平均值?
需求已更改,我作为基于事务数据库的SSRS / SQL过程编写的报告现已移至带有SSAS多维数据集的数据仓库。 SSAS是我的新基础。我花了几天的时间试图通过MDX努力工作,因为我很快意识到拖放方法并不能满足我的需要。
场景:记录大型系统中关键部件和软件过程的性能时间(特别是持续时间,以毫秒为单位)。报告的想法是根据历史优先级显示表现最差的人,并着眼于在用户说“系统运行缓慢"”时找到问题区域。
报告栏:
简化的多维数据集 - 尝试遵循MS文章中的建议
我得到了以下内容,然后开始使用AVG()函数,但收效甚微。
WITH MEMBER [Measures].[Duration MS Avg] AS [Measures].[Duration Ms]/[Measures].[Activities Count]
SELECT
{ [Measures].[Duration Ms], [Measures].[Activities Count], [Measures].[Duration MS Avg] } ON COLUMNS,
{ ([Functions].[Function Desc].[Function Desc].ALLMEMBERS )} ON ROWS
FROM ( SELECT ( {[Dates].[Date Date].&[2016-05-24T00:00:00]} ) ON COLUMNS
FROM [DW])
WHERE ( [Dates].[Date Date].&[2016-05-24T00:00:00] )
这种查询是否可行?我在滥用SSAS吗?
答案 0 :(得分:1)
随着时间层次的增加,沿着日期“旅行”更加困难。
但是这里有一个简单的例子,可以作为一个例子。
WITH
MEMBER [Measures].[Duration MS Avg]
AS
DIVIDE(
[Measures].[Duration Ms]
,[Measures].[Activities Count]
)
MEMBER [Measures].[Duration MS Avg Over Last Day]
AS
DIVIDE(
(
[Dates].[Date Date].CURRENTMEMBER.LAG(1)
,[Measures].[Duration Ms]
)
,(
[Dates].[Date Date].CURRENTMEMBER.LAG(1)
,[Measures].[Activities Count]
)
)
MEMBER [Measures].[Duration MS Avg Over Last Week]--Last 7 days
AS
DIVIDE(
AGGREGATE(
[Dates].[Date Date].CURRENTMEMBER.LAG(7):[Dates].[Date Date].CURRENTMEMBER
,[Measures].[Duration Ms]
)
,AGGREGATE(
[Dates].[Date Date].CURRENTMEMBER.LAG(7):[Dates].[Date Date].CURRENTMEMBER
,[Measures].[Activities Count]
)
)
SELECT
{
[Measures].[Duration Ms],
[Measures].[Activities Count],
[Measures].[Duration MS Avg],
[Measures].[Duration MS Avg Over Last Week]
} ON COLUMNS,
{
(
[Functions].[Function Desc].[Function Desc].ALLMEMBERS
)
} ON ROWS
FROM (
SELECT
( {[Dates].[Date Date].&[2016-05-24T00:00:00]} ) ON COLUMNS
FROM [DW]
)
WHERE
( [Dates].[Date Date].&[2016-05-24T00:00:00] )