成语作为汉语的精华,蕴含着丰富的文化内涵和语言智慧。对成语进行分类分析不仅有助于语言学习,也能展示PowerBI在文本数据处理方面的强大能力。本篇文章将介绍如何在PowerBI中实现成语类型转换。
问题描述
根据成语的叠词情况,可以将其分成多个类型,现在为了分析成语的类型分布,需要将其转换成ABCD、AABB、ABCC等类型,请自行建模完成计算。
具体问题如下图所示:
本案例的初始数据如下:
成语 |
---|
三三两两 |
金蝉脱壳 |
百里挑一 |
含情脉脉 |
背水一战 |
霸王别姬 |
满腹经纶 |
兵临城下 |
春暖花开 |
插翅难逃 |
黄道吉日 |
天下无双 |
偷天换日 |
两小无猜 |
卧虎藏龙 |
若需其它辅助表等,可自行创建并建模。
解题要点
本案例的解决思路为:先提取成语中的每个字形成一个表,然后去重后再拼接成一个字符串,最后依次查找成语中的每个字在去重后的字符串中的索引序号,最后再将索引序号转化为英文字母即可。
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值,这里提供两种方法,区别主要在后面的索引序号转化英文字母的处理上:
成语类型1 =
VAR CurStr = MAX('表'[成语])
VAR Str_List = SELECTCOLUMNS(GENERATESERIES(1,LEN(CurStr)),"a",MID(CurStr,[Value],1))
VAR Str_Distinct = CONCATENATEX(DISTINCT(Str_List),[a])
VAR Str_Transform = SELECTCOLUMNS(Str_List,"alpha",UNICHAR(FIND([a],Str_Distinct)+64))
RETURN
CONCATENATEX(Str_Transform,[alpha])
成语类型2 =
VAR CurStr = MAX('表'[成语])
VAR Str_List = SELECTCOLUMNS(GENERATESERIES(1,LEN(CurStr)),"a",MID(CurStr,[Value],1))
VAR Str_Distinct = CONCATENATEX(DISTINCT(Str_List),[a])
VAR Str_Transform = SELECTCOLUMNS(Str_List,"alpha",MID("ABCD",FIND([a],Str_Distinct),1))
RETURN
CONCATENATEX(Str_Transform,[alpha])
然后创建一个矩阵,并将成语字段作为行标签,再将上面的度量值放入矩阵的值字段即可,结果如下图所示:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627