求助:使用DAX基于两张多对多关联表创建站点-日期新表
DAX 创建关联站点与起始日期的新表方案
需求背景
现有两张关联表:
- Mapping表:记录站点与对应服务的映射关系
Site Service A LAN A WAN A Desktop B LAN B WAN B MainF - Data表:记录服务对应的时间周期
Service Start End LAN 1-Jan 2-Jan WAN 3-Jan 4-Jan Desktop 5-Jan 6-Jan MainF 7-Jan 8-Jan Desktop 9-Jan 10-Jan MainF 11-Jan 12-Jan
两表通过Service字段建立多对多关联,需用DAX生成新表,展示每个站点对应的所有服务起始日期。
解决方案
提供两种可行的DAX表达式,任选其一即可实现需求:
方法一:自然左连接+列筛选
利用NATURALLEFTOUTERJOIN自动匹配关联字段,再提取目标列:
Site_Start_Dates = SELECTCOLUMNS ( NATURALLEFTOUTERJOIN ( Mapping, SELECTCOLUMNS ( Data, "Service", Data[Service], "StartDate", Data[Start] ) ), "Site", Mapping[Site], "Start", [StartDate] )
方法二:交叉连接+存在性筛选
先生成站点与服务日期的全组合,再筛选出映射关系存在的记录:
Site_Start_Dates = FILTER ( CROSSJOIN ( VALUES(Mapping[Site]), SELECTCOLUMNS(Data, "Service_Data", Data[Service], "Start", Data[Start]) ), EXISTS ( Mapping, AND ( Mapping[Site] = [Site], Mapping[Service] = [Service_Data] ) ) )
输出结果
执行上述DAX后,生成的新表如下:
| Site | Start |
|---|---|
| A | 1-Jan |
| A | 3-Jan |
| A | 5-Jan |
| A | 9-Jan |
| B | 1-Jan |
| B | 3-Jan |
| B | 7-Jan |
| B | 11-Jan |
注:若日期显示格式不符合预期,可在Power BI/SSAS中调整新表
Start列的格式设置。
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

