Excel Power Query 清洗数据也是相当地简单

今天继续来讲一个使用Excel Power Query来解决实际例子的题。
如下图所示,将左侧的数据按每一天进行展开,然后将Qity这一列的数据平均分给每天,如右侧的数据。
file

这个问题相当来说也是比较简单的,只需要将日期按每一天来展开即可。
废话不说,先上代码:

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    转换 = Table.AddColumn(源
                           ,"m"
                           ,each 
                                [
                                    日期=List.Transform(
                                        {Number.From([StartDate])..Number.From([EndDate])}
                           ,(x)=>Date.From(x)
                           )
                                    ,Qty1=[Qty]/(Number.From([EndDate]-[StartDate])+1)
                                ]
                            )[m],
    展开 = Table.FromRecords(转换),
    展开2 = Table.ExpandListColumn(展开, "日期")
in
    展开2

file
整个公式是什么意思尼?

{Number.From([StartDate])..Number.From([EndDate])}

这一句是解决这个问题的关键,就是将开始日期与结束日期转化成数字生成一串由数字组成的list,如{1..2}就表示一个1,2,3组成的list,然后再使用List.Transform再将每一个数字再转化成日期格式,所以用到了Date.From函数。

日期=List.Transform(
{Number.From([StartDate])..Number.From([EndDate])}
                           ,(x)=>Date.From(x)
                           )

另外还有一个要点就是:

Qty1=[Qty]/(Number.From([EndDate]-[StartDate])+1)

此处是计算两个日期之间相隔的天数,然后再用Qty这个去除就是平均的。

而这一部分:

 [
 日期=List.Transform(
{Number.From([StartDate])..Number.From([EndDate])}
,(x)=>Date.From(x)
)
,Qty1=[Qty]/(Number.From([EndDate]-[StartDate])+1)
 ]

是用来构建两个列的,即一个Record,第一个就是日期,第二个是一个Qty,平均的。

展开 = Table.FromRecords(转换)
这一部分是将上面的Record进行展开。
file

展开后呢,还需要将List的类型再展开:
file

所以最后用到了,直接双击就可以将list按行展开。如下图所示。
file

Excel和PowerBI聚焦:小必