文章目录

最近在做Sharepoint的一些小开发,类似于公司的报销啦,出差啦这样的一些系统。
然后呢,业务上面还有一些统计的需要。Sharepoint原生支持导出成Excel所以还算是没什么问题。不像是以前用Notes的时候,要么得教上几十遍怎么导出表单,要不是每个需求都得写段导出代码。
可是呢,现在又有了一个新的问题,就是SharePoint 里面不是支持repeat table的嘛,大家用得也都挺开心的,以前用Notes有些做起来很麻烦的东西现在一个repeat table就解决了。可是这个接下来要做数据分析的时候就麻烦了,这个repeat的字段只能选择是汇总了或者是merge之后再显示,所以如果有一个重复字段填了 1 1 2 2 这样的,最终的表单上要么是加在一起就是6这样,要么就是
1
1
2
2
这样插入换行符显示成一个字段,不能每个repeat 字段自动给拆一行。
所以就有点麻烦,本来开开心心的用query导入,然后稍微整理一下就可以做透视了,现在还得先拆分行。想了想,写了个VBA,好歹是把问题解决了。
不过还是觉得不太满意,这几天快放假了,有了点空,想着再研究一下Query和Power BI, 从源头上把问题解决掉吧。
Query和Power BI里面抽取,处理数据用的都是M语言,想想现在语言这么多,字母都快不够用了。
既然是要做嘛,就直接在Power BI里面来搞就是了,上微软下了一个Power BI Desktop, 登录了一下Power BI的账号,发现我一年前不知道为什么登陆过,所以现在还能送一年的pro账号,感觉赚到了,如果以前没用过的话,默认是送一个月的pro账号的。
先从sharepoint导入数据这个不提,现在的问题是如何把merge的行拆分出来。
Power BI的数据编辑器里面倒是提供了拆分列 - 拆分到行的,但是只能拆分一次,而我们有大概6个列要拆分的,
所以要变通一下。
先统计一下要拆分几列吧,字段里面有一个是公司的ID,每个人都是六位数的,所以新建一列叫做

Count Number = Number.IntegerDivide(Text.Length([Reward ID])+1,7)

然后这里就是要拆分的条数了,然后要给拆分后的每一条记录一个内部编号,分别从每个要拆分字段里面拿记录,先做一个数列吧,还是新建一列叫做

List Times = List.Numbers(1,[Count Number])

这样比如说ID字段里面有3条记录的话,就能产生一个1,2,3 这样的字符串,这个有什么用呢? 我们再把list times给拆分一下,按行按逗号拆分的话就能把一条含有3个子记录的单子,拆成3个单子,然后每一个单子的在List Times 里面有一个自己的内部编号。
然后有了这个内部编号,我们只要来按照内部编号把每一个要拆分的字段取自己对应编号的值就可以了

Reward To [New] = Text.Split([Reward To],”#(lf)”){[Line Times]-1}

比如说这个Reward To [New] , 如果这条的List Times是1的话,就是从 Reward To 里面按照换行的分割顺序,取第1-1 也就是第0个数据。 这样一来就能完美的拆分出来啦。

然后就是拖拖拖,点点点,做做视觉效果,pin一下dashboard。一个起码看起来挺高科技的报表就做好了。
正好之后是黄金周,花点时间吧M语言的函数都了解一下吧。