You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI中结合SEARCH与COUNTROWS实现学生班级数量统计

解决DAX中从逗号分隔学生列统计班级参与数量的问题

嘿,我完全懂你那种手动建表再UNION的痛苦——太繁琐了!其实不用这么折腾,我们可以用DAX的函数组合轻松实现,既可以用更简洁的拆分+统计方法,也能满足你想要结合SEARCH和COUNTROWS的需求,下面给你两种方案:

方案一:用TEXTSPLIT快速拆分(推荐,Power BI 2022年及以后版本支持)

这种方法先把每个班级的逗号分隔学生拆成单独行,再统计数量,步骤清晰且高效:

1. 先生成学生-班级映射明细(可选中间表)

学生班级映射 = 
GENERATE(
    Table1, // 你的原始班级表
    SELECTCOLUMNS(
        TEXTSPLIT(Table1[学生姓名], ","), // 拆分逗号分隔的姓名
        "学生姓名", TRIM([Value]) // 去除姓名前后可能的空格
    )
)

GENERATE会把每个班级和拆分后的每个学生一一配对,生成一条学生对应一个班级的明细行,彻底解决逗号分隔的问题。

2. 生成最终统计表Table2

基于上面的映射表,直接汇总统计:

Table2 = 
SUMMARIZE(
    '学生班级映射',
    '学生班级映射'[学生姓名],
    "参与班级数量", COUNTROWS(RELATEDTABLE('学生班级映射'))
)

或者你也可以跳过中间表,一步到位:

Table2 = 
VAR 学生班级明细 = 
    GENERATE(
        Table1,
        SELECTCOLUMNS(TEXTSPLIT(Table1[学生姓名], ","), "学生姓名", TRIM([Value]))
    )
RETURN
    SUMMARIZE(
        学生班级明细,
        [学生姓名],
        "参与班级数量", COUNTROWS(FILTER(学生班级明细, [学生姓名] = EARLIER([学生姓名])))
    )

方案二:结合SEARCH与COUNTROWS实现(兼容旧版本)

如果你的环境不支持TEXTSPLIT,那我们可以用SEARCH来检查每个学生是否出现在班级的学生列表中,再用COUNTROWS统计符合条件的班级数:

Table2 = 
// 第一步:先提取所有唯一的学生姓名
VAR 所有唯一学生 = 
    DISTINCT(
        SELECTCOLUMNS(
            GENERATE(
                Table1,
                // 计算当前班级有多少个学生(逗号数量+1)
                ADDCOLUMNS(
                    GENERATESERIES(1, LEN(Table1[学生姓名]) - LEN(SUBSTITUTE(Table1[学生姓名], ",", "")) + 1),
                    "学生姓名", 
                    // 通过字符串替换拆分出每个学生姓名
                    TRIM(MID(SUBSTITUTE(Table1[学生姓名], ",", REPT(" ", LEN(Table1[学生姓名]))), ([Value]-1)*LEN(Table1[学生姓名])+1, LEN(Table1[学生姓名])))
                )
            ),
            "学生姓名", [学生姓名]
        )
    )
// 第二步:对每个学生,统计包含他的班级数量
RETURN
    ADDCOLUMNS(
        所有唯一学生,
        "参与班级数量", 
        COUNTROWS(
            FILTER(
                Table1,
                // SEARCH返回找到的位置,找不到返回0,所以>0代表班级包含该学生
                SEARCH([学生姓名], Table1[学生姓名], 1, 0) > 0
            )
        )
    )

这里的核心逻辑是:先通过字符串操作拆分出所有唯一学生,再对每个学生遍历原始班级表,用SEARCH检查该学生是否在班级的学生列表中,最后用COUNTROWS统计符合条件的班级行数,就是这个学生参与的班级数量。

这两种方案都能帮你摆脱手动建表再UNION的繁琐操作,直接生成你需要的Table2!

内容的提问来源于stack exchange,提问作者Richard Bellis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:22:24