Power BI数据转换:如何仅返回当前活跃(非暂停)记录?
Power BI 筛选当前活跃(非暂停)地址记录方案
需求说明
从Address表中筛选当前未处于暂停状态的记录:
- 无暂停历史的地址直接保留
- 有暂停历史的地址,取其最新生效的状态,仅保留最新状态为
FALSE的记录
方法一:Power Query 数据转换(推荐用于数据加载阶段处理)
- 加载
Address和AddressSuspendedHistory表进入Power Query编辑器 - 处理
AddressSuspendedHistory表,提取每个PLACEID的最新状态记录:
粘贴以下M语言代码到高级编辑器替换原有内容:let Source = AddressSuspendedHistory, // 按PLACEID分组,保留每组生效日期最新的记录 GroupedByPlaceID = Table.Group(Source, {"PLACEID"}, {{"LatestRecord", each Table.Max(_, "EFFECTIVEDATE"), type record}}), // 展开记录列,获取最新状态和日期 ExpandedLatestRecord = Table.ExpandRecordColumn(GroupedByPlaceID, "LatestRecord", {"SUSPENDED?", "EFFECTIVEDATE"}, {"SUSPENDED?", "EFFECTIVEDATE"}) in ExpandedLatestRecord - 将处理后的历史表与
Address表做左外部合并,匹配列为PLACEID - 添加自定义列判断是否保留该地址:
= if [SUSPENDED?] = null or [SUSPENDED?] = false then true else false - 筛选自定义列为
true的行,删除SUSPENDED?和EFFECTIVEDATE列,即可得到目标结果表
方法二:DAX 创建计算表(用于报表端动态计算)
在Power BI模型中新建计算表,粘贴以下DAX表达式:
ActiveAddresses = VAR LatestStatusPerPlace = ADDCOLUMNS( VALUES(Address[PLACEID]), "@LatestSuspended", VAR CurrentPlace = Address[PLACEID] VAR LatestEffectDate = CALCULATE(MAX(AddressSuspendedHistory[EFFECTIVEDATE]), AddressSuspendedHistory[PLACEID] = CurrentPlace) RETURN CALCULATE(MAX(AddressSuspendedHistory[SUSPENDED?]), AddressSuspendedHistory[PLACEID] = CurrentPlace, AddressSuspendedHistory[EFFECTIVEDATE] = LatestEffectDate) ) RETURN SELECTCOLUMNS( FILTER(LatestStatusPerPlace, ISBLANK([@LatestSuspended]) || [@LatestSuspended] = FALSE()), "PLACEID", Address[PLACEID], "ADDRESS", Address[ADDRESS] )
表达式说明
LatestStatusPerPlace:计算每个PLACEID对应的最新暂停状态- 最终筛选出无暂停历史(状态为空)或最新状态为
FALSE的地址,提取所需字段
内容的提问来源于stack exchange,提问作者Gwillz
相关产品推荐
相关产品推荐

