Power BI中如何高效将患者数不足300的医生归为「其他医生」类?
更高效的DAX替代方案(无需冗余中间表)
针对你把患者数不足300的医生合并为「Other doctors combined」的需求,以下几种方案比当前“先建汇总表再加计算列”的方式更直接高效:
方案1:利用独立医生表直接添加计算列
如果数据库中有单独的Doctors表(包含Doctor.FullName字段),直接在该表创建计算列,一步完成分组逻辑,无需提前生成汇总表:
DoctorGroup = VAR PatientCount = CALCULATE(COUNT(Patient[Id]), RELATEDTABLE(Patient)) RETURN IF(PatientCount >= 300, [Doctor.FullName], "Other doctors combined")
通过RELATEDTABLE关联患者表计算每个医生的患者数,避免冗余汇总表占用内存,操作简洁高效。
方案2:全动态DAX度量值组合(无计算列/汇总表)
适合数据实时更新的场景,完全按需计算,不生成静态表:
- 先创建基础患者数度量值:
PatientCount = COUNT(Patient[Id])
- 创建动态分组表(用于饼图的轴字段):
DynamicDoctorGroups = UNION( // 筛选出患者数≥300的医生 SELECTCOLUMNS( FILTER(VALUES(Patient[Doctor.FullName]), [PatientCount] >= 300), "DoctorGroup", Patient[Doctor.FullName] ), // 添加“其他医生”分组 {("Other doctors combined")} )
- 创建分组后的患者数度量值:
GroupedPatientCount = VAR SelectedGroup = SELECTEDVALUE(DynamicDoctorGroups[DoctorGroup]) RETURN IF( SelectedGroup = "Other doctors combined", CALCULATE( [PatientCount], FILTER(ALL(Patient[Doctor.FullName]), [PatientCount] < 300) ), CALCULATE([PatientCount], Patient[Doctor.FullName] = SelectedGroup) )
将DynamicDoctorGroups[DoctorGroup]拖到饼图轴字段,GroupedPatientCount拖到值字段即可,数据更新时自动同步分组结果。
方案3:Power Query预处理分组(适合大数据量)
如果数据量较大且更新频率低,提前在Power Query中完成分组汇总,减少DAX实时计算压力:
let Source = 你的患者明细表, // 按医生分组计算患者数 GroupByDoctor = Table.Group(Source, {"Doctor.FullName"}, {{"PatientCount", each Table.RowCount(_), Int64.Type}}), // 添加分组列 AddGroupColumn = Table.AddColumn(GroupByDoctor, "DoctorGroup", each if [PatientCount] >= 300 then [Doctor.FullName] else "Other doctors combined"), // 按最终分组汇总患者数 FinalGroup = Table.Group(AddGroupColumn, {"DoctorGroup"}, {{"TotalPatients", each List.Sum([PatientCount]), Int64.Type}}) in FinalGroup
将处理后的表加载到数据模型,直接用于饼图即可。
内容的提问来源于stack exchange,提问作者Dan M
相关产品推荐
相关产品推荐

