easyBI中Xray测试计划MDX计算性能问题及优化问询
优化Xray测试计划最新执行结果的MDX计算
原MDX在处理包含大量测试执行的计划时超时,核心问题是针对每个测试用例嵌套迭代了所有时间维度日成员、所有执行状态成员,导致计算量呈指数级增长。以下是优化后的MDX及说明:
优化后的MDX代码
-- annotations. Group=Xray User defined CASE WHEN [Xray Test Run Status].CurrentMember.Level.Name = "Status" THEN -- 按最新执行状态统计测试用例数 Cache(NonZero(Count( Filter( Descendants([Xray Test].CurrentMember, [Xray Test].[Test]), [Measures].[Xray Tests with executions] > 0 AND -- 直接获取该测试最后一次执行对应的状态 ( [Measures].[Xray Test Run Status], Tail( -- 按执行时间倒序取最后一次执行的时间节点 Order( Filter([Time].[Day].Members, [Measures].[Xray Tests with executions] > 0), [Time].CurrentHierarchyMember.StartDate, BDESC ), 1 ).Item(0) ) = [Xray Test Run Status].CurrentMember.Name ) ))) ELSE -- 统计有执行记录的测试用例总数 ([Measures].[Xray Tests with executions], [Xray Test Run Status].DefaultMember) END
优化点说明
- 砍掉多层嵌套循环:原代码在排序执行状态时嵌套了Generate、Tail等多层时间迭代逻辑,优化后直接先对时间成员按执行时间倒序排序,取最后一条记录再关联状态,大幅减少计算层级。
- 简化状态匹配逻辑:直接通过最后执行时间对应的
Xray Test Run Status度量值匹配当前状态成员,替代原代码中对状态成员排序后取第一条的复杂逻辑,降低计算开销。 - 保留缓存优化:保留
Cache函数,确保计算结果可被缓存,重复查询时直接复用。
额外优化建议
- 限制时间范围:如果报表无需查询全量历史数据,可在报表层面添加时间维度过滤,减少需要处理的时间成员数量。
- 预计算度量:若easyBI支持,可将“测试用例最后执行状态”设为预计算自定义度量,提前完成计算,报表直接调用即可。
内容的提问来源于stack exchange,提问作者Seif
相关产品推荐
相关产品推荐

