Excel Power Query 清洗数据也是相当地简单
今天继续来讲一个使用Excel Power Query来解决实际例子的题。
如下图所示,将左侧的数据按每一天进行展开,然后将Qity这一列的数据平均分给每天,如右侧的数据。
这个问题相当来说也是比较简单的,只需要将日期按每一天来展开即可。
废话不说,先上代码:
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
整个公式是什么意思尼?
{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进行展开。
展开后呢,还需要将List的类型再展开:
所以最后用到了,直接双击就可以将list按行展开。如下图所示。
Excel和PowerBI聚焦:小必
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)