MDX OLAP多维数据集查询优化

时间:2019-01-26 06:46:47

标签: ssas mdx olap-cube

问题:我正在尝试编写一个MDX查询,该查询将显示成员具有度量值的第一个日期。

数据障碍: 1.我无权访问数据仓库/源数据 2.我无法请求任何物理计算或多维数据集更改

寻找:我知道这与CUBE应该做的事情背道而驰,但是有什么方法可以实现这一结果。我遇到了锁定冲突和一般运行时问题。

背景:经过反复试验。我有一个有效的查询,但可悲的是,只有为少于10名的员工过滤时,它才是实际的。我尝试了一些循环,但是多维数据集中有约6万个员工ID,每个ID都有10-20个emp键(员工信息的每次更改都对应一个)。

//must have values for measure 1 or 2
WITH 
set NE_measures as
{
[Measures].[measure1] ,
[Measures].[measure2]
} 

//first date with measure values for each unique emp key
MEMBER [Measures].[changedate] AS
 Head
 (
 NonEmpty([Dim Date].[Date].[Date].allMEMBERS, NE_measures)
 ).Item(0).Member_Name

SELECT  non empty  {[Measures].[changedate]} ON COLUMNS,
non empty   [Dim Employee].[Emp Key].[Emp Key].allmembers ON ROWS

FROM [Cube]

1 个答案:

答案 0 :(得分:2)

尝试一下:

MEMBER [Measures].[changedate] AS
Min(
 [Dim Date].[Date].[Date].allMEMBERS, 
 IIF(
  NOT(ISEMPTY([Measures].[measure1]))
  OR NOT(ISEMPTY([Measures].[measure2])),
  [Dim Date].[Date].CurrentMember.MemberValue,
  NULL
 )
);

我假设KeyColumn或ValueColumn比名称更可能正确排序。因此,如果MemberValue不起作用,请尝试Member_Key

完成此操作的最有效方法是在事实表中添加带有度量1和度量2的日期列,然后在其上创建AggregateFunction = Min度量。但是您说您无法更改多维数据集,因此我没有提出该高级选项。