如何将筛选DS开头doc字段的SQL改写为正确的DAX语句
等效DAX写法说明
原SQL的核心逻辑是筛选出表中所有以DS为前缀的去重doc值,你之前编写的DAX存在3个问题:
- 误用
DISTINCTCOUNT聚合函数:该函数用于统计不重复值的数量,和SQL返回去重后值集合的逻辑不符 - 筛选条件语法错误:
CALCULATE的布尔筛选参数需要针对基础表逐行计算判断,不能直接传入DISTINCT返回的多值表作为判断对象 - 匹配逻辑错误:
SEARCH("DS",...)默认匹配任意位置包含DS的文本,和SQL中like 'DS%'仅匹配开头为DS的规则不一致
根据你的使用场景,选择对应写法即可:
场景1:编写度量值,统计符合条件的不重复doc数量
如果你的目标是计算以DS开头的doc有多少个不重复值,用以下度量值写法:
DS开头doc不重复计数 = CALCULATE ( DISTINCTCOUNT ( 'table'[doc] ), LEFT ( 'table'[doc], 2 ) = "DS" )
注:用
LEFT做前缀匹配的性能优于SEARCH,如果需要保留SEARCH写法,可将判断条件替换为SEARCH("DS", 'table'[doc], 1, 0) = 1,当返回值为1时代表DS出现在字符串起始位置,和like 'DS%'逻辑完全一致。
场景2:编写DAX查询,返回和原SQL完全一致的去重值列表
如果需要和原SQL一样直接返回符合条件的去重doc结果集,用DAX查询写法:
EVALUATE FILTER ( DISTINCT ( 'table'[doc] ), LEFT ( 'table'[doc], 2 ) = "DS" )
如果需要对返回结果排序,可以在末尾加ORDER BY 'table'[doc]即可。
内容的提问来源于stack exchange,提问作者Тимур Хабибуллин
相关产品推荐
相关产品推荐

