DAX查询按ProductNumber、SerialNumber去重时如何保留其余字段
解决方案
你之前的写法丢失字段的原因是:DISTINCT 仅作用在你指定的仅包含SerialNumber和ProductNumber两列的结果集上,自然不会携带其他字段。结合你的SQL背景,你可以用SUMMARIZE函数实现等价于GROUP BY的效果,按指定列分组去重的同时返回需要的其他字段。
另外建议不要用FORMAT转字符串做日期比较,直接用日期值比较性能更高且不会出现格式匹配异常,最终可直接使用如下查询:
EVALUATE CALCULATETABLE ( SUMMARIZE ( 'Analysis Services DB', -- 以下两列为分组去重依据,等价于SQL中GROUP BY的字段 'Analysis Services DB'[SerialNumber], 'Analysis Services DB'[ProductNumber], -- 后续为你需要返回的其他字段 "COIDate", 'Analysis Services DB'[COIDate], "ProductFullName", 'Analysis Services DB'[ProductFullName] ), -- 过滤条件 'Analysis Services DB'[ProductLine] = "TW", 'Analysis Services DB'[COIDate] <> BLANK(), 'Analysis Services DB'[COIDate] <= DATE(2018,12,12) )
补充说明
如果同一个SerialNumber+ProductNumber分组下存在多个不同的COIDate或ProductFullName,你可以和SQL用法一样给对应字段加聚合函数,比如取最早的COIDate就写为:"COIDate", MIN('Analysis Services DB'[COIDate])
如果同分组下这些字段的值均唯一,直接返回原始字段即可。
内容的提问来源于stack exchange,提问作者RobyB
相关产品推荐
相关产品推荐

