大海:啊。你这个拆分列是在原来最多只有3个内容的时候做的?
小勤:对啊,但现在有4个内容的,分列出来也只有3个。
大海:嗯。这个直接操作的方法是有点儿问题,主要是因为,操作分列的时候,PQ会直接生成固定的列名,原来最多只要3个内容,就只生成了3列,所以以后有更多的数据时,就没有地方放了。你看原来生成的代码:
小勤:啊。原来这样。那怎么办呢?
大海:既然找到原因了,咱们就想办法直接构造出一个动态序列给它呗。
小勤:那我们得先知道会分出来多少列啊。
大海:嗯。你想想,如果知道其中有几个“-”,是不是就知道会分出来多少列了?
小勤:对啊。有几个“-”,然后加1,就是多少列了。
大海:嗯。然后咱们知道了每一个行会有多少列,那咱们也就可以知道最大可能有多少列了,这样咱们就可以动态的生成列名了。
小勤:对啊。那具体怎么做呢?感觉这个公式好像也有点儿复杂。
大海:这样:
Step-01:我们在拆分列之前,先识别每行里有多少项内容:
List.Count(
Text.PositionOf(
[待拆分列],
"-",
Occurrence.All
)
)
+ 1
其中Text.PositionOf用于识别在[待拆分列]中"-"的位置,Occurrence参数有种可选项:
List.Count对返回的所有位置进行计数,即得到有多少个“-”,再加1就是内容项数。
Step-02:修改原拆分列代码中的固定列名列表为动态列名列表
{"1"..Text.From(List.Max(已添加自定义[内容数]))}
小勤:啊。理解了,反正就是想办法根据内容的最大项数构造一个动态的列名列表给拆分列的步骤去用。
大海:对的。
小勤:那要是超过10列怎么办?用{"1"..##}的方式会不会出错啊?
大海:好问题。你试试?
小勤:出错了。
大海:对的。如果超过10项内容,会出错,因为简单的构造字符列表不能出现2个字符的内容。
小勤:那怎么办?
大海:那需要进一步使用其他的函数,先提供个思路给你,比如可以先直接生成数字序列【{1..List.Max()}】,然后将数字序列转换为文本序列【List.Transform】,你自己查文档试试?
小勤:嗯。我试试。
大海:随着慢慢理解PQ的操作和M语言及函数的用法,一定要学会自己查文档解决问题,才可能更加快速的提升。
小勤:好的。师父领进门,修行在个人嘛。
本文分享自 Excel到PowerBI 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!