SSAS Tabular模型中用DAX获取筛选后事实表的最大日期格式值
你代码出错的核心原因是Date维度和Event事实表的默认交叉筛选方向为单方向(仅从Date端流向Event端),你在CALCULATE中添加的Event表筛选条件无法反向传递到Date表,导致MAX('Date'[Date])返回的是当前上下文的Date表最大日期,而非筛选后Event对应的最大日期。
最优解决方案
你已经可以通过MAX('Event'[Key Event Date])拿到符合条件的最大date_key,直接调用LOOKUPVALUE关联Date维度转换为日期格式即可,这种方式性能最优,也不会引入筛选方向变更的副作用:
Last Event Date:= VAR EndDateKey = IF ( MAX ( 'Date'[key Date] ) > MAX ( 'Event'[Key Event Date]), MAX ( 'Event'[Key Event Date]), MAX ( 'Date'[key Date] ) ) VAR StartDateKey = IF ( MIN ( 'Date'[key Date] ) < MIN ( 'Event'[Key Event Date] ), MIN ( 'Event'[Key Event Date]), MIN ( 'Date'[key Date] ) ) -- 先获取符合筛选条件的最大date_key VAR MaxEventDateKey = CALCULATE( MAX('Event'[Key Event Date]), FILTER('Event Type', 'Event Type'[Event Type] = "NewEvent"), FILTER(VALUES('Event'[Key Event Date]), 'Event'[Key Event Date] <= EndDateKey && 'Event'[Key Event Date]>= StartDateKey) ) -- 关联Date维度返回日期格式 RETURN LOOKUPVALUE('Date'[Date], 'Date'[key Date], MaxEventDateKey)
可选解决方案
你也可以通过CROSSFILTER函数临时开启关系的双向交叉筛选,让Event的筛选条件传递到Date表,直接取Date表的日期值:
Last Event Date:= VAR EndDateKey = IF ( MAX ( 'Date'[key Date] ) > MAX ( 'Event'[Key Event Date]), MAX ( 'Event'[Key Event Date]), MAX ( 'Date'[key Date] ) ) VAR StartDateKey = IF ( MIN ( 'Date'[key Date] ) < MIN ( 'Event'[Key Event Date] ), MIN ( 'Event'[Key Event Date]), MIN ( 'Date'[key Date] ) ) RETURN CALCULATE( MAX('Date'[Date]), FILTER('Event Type', 'Event Type'[Event Type] = "NewEvent"), FILTER(VALUES('Event'[Key Event Date]), 'Event'[Key Event Date] <= EndDateKey && 'Event'[Key Event Date]>= StartDateKey), CROSSFILTER('Event'[Key Event Date], 'Date'[key Date], BOTH) )
内容的提问来源于stack exchange,提问作者kayeesp
相关产品推荐
相关产品推荐

