基于指定前缀文本统计多列行数的DAX函数使用问题
多列匹配统计解决方案
问题回顾
需要统计表格中任意一个「Linked Issues」系列列存在以THGRW-开头内容的行数,此前用单列COUNTROWS(FILTER('Sheet1', 'Sheet1'[Linked Issues.1] >= "THGRW-000"))无结果,且原计划用多列COUNTROWS累加会导致同一行重复计数。
单列公式失效原因
- 用
>= "THGRW-000"的字符串比较逻辑不准确:仅匹配字典序大于等于该值的内容,无法识别单元格内包含THGRW-的多Issue内容(如多Issue用逗号分隔的格式) - 空值或非
THGRW-开头的内容会直接被过滤,导致返回0
正确多列统计公式(避免重复计数)
方案1:匹配包含THGRW-的内容(兼容多Issue单元格)
用CONTAINSSTRING判断列中是否包含目标前缀,通过||(逻辑或)实现任意一列满足即统计该行:
Episode without SM = COUNTROWS( FILTER( 'Sheet1', CONTAINSSTRING('Sheet1'[Linked Issues.1], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.2], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.3], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.4], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.5], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.6], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.7], "THGRW-") || CONTAINSSTRING('Sheet1'[Linked Issues.8], "THGRW-") ) )
方案2:严格匹配以THGRW-开头的内容
如果需要仅统计列内容**开头就是THGRW-**的行,用LEFT函数结合空值判断避免错误:
Episode without SM = COUNTROWS( FILTER( 'Sheet1', (NOT(ISBLANK('Sheet1'[Linked Issues.1])) && LEFT('Sheet1'[Linked Issues.1], 6) = "THGRW-") || (NOT(ISBLANK('Sheet1'[Linked Issues.2])) && LEFT('Sheet1'[Linked Issues.2], 6) = "THGRW-") || // 依次复制剩余6列的判断逻辑 (NOT(ISBLANK('Sheet1'[Linked Issues.8])) && LEFT('Sheet1'[Linked Issues.8], 6) = "THGRW-") ) )
注意事项
- 禁止用多个
COUNTROWS累加的方式,否则同一行若多列符合条件会被重复统计 - 如果表格列名有变动,需同步修改公式中的列引用
内容的提问来源于stack exchange,提问作者Laurens
相关产品推荐
相关产品推荐

