如何在两表无同名列场景下执行NATURALLEFTOUTERJOIN并解决列不兼容报错
报错根因
检测到不兼容的联接列(''[WeekName])。'NATURALLEFTOUTERJOIN'不支持对数据类型或数据沿袭不同的列执行联接
NATURALLEFTOUTERJOIN对自动匹配的关联列有两个强制要求,不符合任一都会触发上述报错:
- 列名完全一致
- 列的数据类型、数据沿袭完全一致
你代码中两个表生成的WeekName列分别来自DateTime[yDayFullName]和Mergetable[WeekDayName],属于两个不同的原始数据源,默认数据沿袭不互通,哪怕数据类型肉眼看起来一致也无法通过校验。
解决方案
方案一:兼容NATURALLEFTOUTERJOIN的修改方式
统一两个WeekName列的数据类型,同时切断和原始列的沿袭关联即可,修改后代码如下:
LeftOuterJoin = NATURALLEFTOUTERJOIN( SELECTCOLUMNS( GROUPBY(DateTime,DateTime[yDayFullName], "WEEKCOUNT", COUNTX(CURRENTGROUP(),DateTime[yDayFullName])), "WeekName", FORMAT(DateTime[yDayFullName], "General Text"), "WEEKCOUNT", [WEEKCOUNT] ), SELECTCOLUMNS( GROUPBY(FILTER(Mergetable,Mergetable[noShow]<>"true"),Mergetable[WeekDayName], "TOTALDURATION", SUMX(CURRENTGROUP(),Mergetable[MeetingDurationInHours])), "WeekName", FORMAT(Mergetable[WeekDayName], "General Text"), "TOTALDURATION", [TOTALDURATION] ) )
方案二:更稳定的替代写法
如果不想纠结数据类型和沿袭问题,可以直接改用TREATAS+ADDCOLUMNS的组合手动指定关联逻辑,兼容性更强,不会触发同类报错:
LeftOuterJoin = VAR WeekBase = GROUPBY(DateTime,DateTime[yDayFullName], "WEEKCOUNT", COUNTX(CURRENTGROUP(),DateTime[yDayFullName])) VAR WeekDuration = GROUPBY(FILTER(Mergetable,Mergetable[noShow]<>"true"),Mergetable[WeekDayName], "TOTALDURATION", SUMX(CURRENTGROUP(),Mergetable[MeetingDurationInHours])) RETURN ADDCOLUMNS( WeekBase, "TOTALDURATION", CALCULATE(SUM(WeekDuration[TOTALDURATION]), TREATAS({WeekBase[yDayFullName]}, WeekDuration[WeekDayName])) )
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

