PMC表格模型39:二维转一维模型
优秀创作者
全文约700
大家好,我是古老师,今天分享第39个表格模型,二维转一维模型,这个模型可以说是PMC使用场景非常高的一个模型,因为在进行生产计划排程的时候,用二维数据比较直观的显示各个订单的进度,但是在需要进行计算,统计的时候,用一维数据结构可以高效的进行二次运算。所以说建立一个二维数据自动生成一维数据的模型是非常有必要的。
数据结构
二维数据一般来说有垂直区,水平区,和交错区,为了方便后续动态推展,配合裁减函数和偏移函数及定义名称,对这些区域进行标准化定义。录入以下函数进行定义:
定义名称A:=TRIMRANGE(MPS!A2:B3000)
定义名称B:=TRIMRANGE(MPS!D1:Z1)
定义名称C:=OFFSET(TRIMRANGE(MPS!D1:Z1),1,,4)
垂直方向
定义好这些动态扩展的区域后就可以把对应的数据进行维度转换了,先进行垂直方向的数据转换,录入以下动态数组函数:
=LET(A,TRIMRANGE(MPS!A2:B3000),B,TRIMRANGE(MPS!D1:Z1),C,OFFSET(B,1,,ROWS(A)),HSTACK(WRAPROWS(TOCOL(REPTARRAY(A,,COUNTA(B))),COLUMNS(A))))
水平方向
水平方向的思路还是用重复函数REPTARRAY,录入动态数组公式:
=LET(A,TRIMRANGE(MPS!A2:B3000),B,TRIMRANGE(MPS!D1:Z1),C,OFFSET(B,1,,ROWS(A)),HSTACK(WRAPROWS(TOCOL(REPTARRAY(A,,COUNTA(B))),COLUMNS(A)),TOCOL(REPTARRAY(B,,ROWS(A)))))
交错区域
最后就是交错区域,交错区域这里最为简单,可以直接使用TOCOL函数,录入动态数组公式:
=LET(A,TRIMRANGE(MPS!A2:B3000),B,TRIMRANGE(MPS!D1:Z1),C,OFFSET(B,1,,ROWS(A)),HSTACK(WRAPROWS(TOCOL(REPTARRAY(A,,COUNTA(B))),COLUMNS(A)),TOCOL(REPTARRAY(B,,ROWS(A))),TOCOL(C)))
去除空值
最后就是去重无效的空值,也就是没有排程的数据,这里是用的筛选函数筛选不为空的数据:
=LET(G,LET(A,TRIMRANGE(MPS!A2:B3000),B,TRIMRANGE(MPS!D1:Z1),C,OFFSET(B,1,,ROWS(A)),HSTACK(WRAPROWS(TOCOL(REPTARRAY(A,,COUNTA(B))),COLUMNS(A)),TOCOL(REPTARRAY(B,,ROWS(A))),TOCOL(C))),FILTER(G,INDEX(G,,4)>0))
最后总结
二维转一维的方法特别多,为什么用上面的这样复杂的公式,是因为想实现完完全全的全动态数组动态扩展,如果没有这方面的需求,可以用这个简单化公式:
=GROUPBY(A2:B5,D2:G5,CHOOSE({1,2},SINGLE,TOCOL(D1:G1)),,0)