你好,我是小必,感谢与你在这里相遇。
昨天在头条号上看到了一位作者更新了这道题目。练手题很好。 要求:提取每行字符串中的数值,然后对数值的最后一位进行求和。这道题目在实际的应用中没有什么意义,但是可以用来练习Excel Power Query。 即第一行为:3+3+3=9;第二行为3+2+2=7,依次类推…… 原作者的思路是:先添加一个索引列,然后再对字符串进行【从非数字到数字进行拆分】的功能操作,然后再修改公式,再次进行逆透视,最后对索引进行一次分即可。 对于上面的这个题目,可以使用M公式一步到步更加地简单快捷。主要有解题过程与思路为。 首先,添加一列,使用汉字列表与英文字符列表对“内容”列进行拆分,使用Text.SplitAny函数与Text.Combine函数相结合。 由于使用汉字列表,所以考虑到效率问题,加一个List.Buffer用来提高效率。= Table.AddColumn(源,"每个数字的最后一位和",each Text.SplitAny([内容],Text.Combine( List.Buffer({"一".."龟","A".."z"}))))
其次,筛选掉每个List中的空值,可以使用List.Select函数。如图所示。
= Table.AddColumn(源,"每个数字的最后一位和",each List.Select(Text.SplitAny([内容], Text.Combine( List.Buffer({"一".."龟","A".."z"}))),each _<>""))
遍历每个List,使用Text.End函数提取最后一位后,再将其转化为数值。
= Table.AddColumn(源,"每个数字的最后一位和",each List.Transform(List.Select( Text.SplitAny([内容],Text.Combine( List.Buffer({"一".."龟","A".."z"}))),each _<>""), each Number.From(Text.End(_,1)) ))
最后使用List.Sum对其进行求和即可。
完整的代码为:
我是小必,期待下次与您相遇。