Power BI查询实现:判断当前委员会志愿者是否已提名明年服务
解决方案:标识现有志愿者是否已报名明年志愿服务
方法1:直接在SQL数据源层处理(推荐,高效简洁)
因为数据存储在SQL Server,直接编写查询生成带标识列的结果集再导入Power BI,是最省心的方式,还能减少Power BI端的计算压力。
编写如下SQL查询,将其作为Power BI的数据源:
SELECT cm.UserID, cm.CommitteeID, c.CommitteeName, -- 可选,按需添加委员会名称 cm.MemberJoinDate, -- 可选,添加当前成员的其他信息 -- 生成布尔标识列:已报名为1,未报名为0 CASE WHEN cn.UserID IS NOT NULL THEN 1 ELSE 0 END AS IsNominatedNextYear FROM [Committee Membership] cm -- 左连接报名表,匹配同一用户+同一委员会的报名记录 LEFT JOIN [Committee Nominations] cn ON cm.UserID = cn.UserID AND cm.CommitteeID = cn.CommitteeID -- 可选:左连接委员会表获取额外信息 LEFT JOIN Committees c ON cm.CommitteeID = c.CommitteeID
将该查询导入Power BI后,直接就能得到包含所有当前志愿者、且带有报名状态标识的表格。
方法2:在Power Query中可视化操作
如果不想修改SQL,直接在Power BI的Power Query编辑器里处理:
- 先把
Committees、Committee Membership、Committee Nominations三张表导入Power Query - 选中
Committee Membership表,点击顶部的「合并查询」→「合并查询作为新查询」 - 连接类型选「左外部(从第一个表获取所有行,从第二个表匹配行)」,关联字段同时选
UserID和CommitteeID,关联到Committee Nominations表 - 展开合并后的列,只保留任意一个非空字段(比如
UserID) - 添加自定义列,输入公式:
= not List.IsNull([Committee Nominations.UserID]),生成True/False的布尔标识列 - 可选:重复合并步骤关联
Committees表,获取委员会名称等信息
方法3:用DAX添加计算列
如果已经在数据模型中建立了正确的关系(Committee Membership与Committee Nominations通过UserID+CommitteeID关联),可以在Committee Membership表中新建计算列:
IsNominatedNextYear = NOT ISBLANK( LOOKUPVALUE( 'Committee Nominations'[UserID], 'Committee Nominations'[UserID], 'Committee Membership'[UserID], 'Committee Nominations'[CommitteeID], 'Committee Membership'[CommitteeID] ) )
这个公式会查找当前志愿者是否有对应委员会的报名记录,返回True(已报名)或False(未报名)。
内容的提问来源于stack exchange,提问作者Michael Cunningham
相关产品推荐
相关产品推荐

