团队表:
行程表:
目标表:
要求注意事项:
制作这样的表格,可以通过多次合并查询来进行,例如2个表
通过一个共享日期列进行合并查询后就可以得到这样个效果。
我们围绕这个最终实现效果来进行数据的整理。
我们需要构建成这样一张表,通过生成多张类似的表即可完成最后的合并。
各个团最后一天日期 例如:2016/1/6日有一个2日团队,所以团队最后一个行程日期为2016/1/6+1=2016/1/7
在日期团队表中进行处理
Table.ToColumns(更改的类型)
List.Transform(List.Skip(拆分到列,1), (a)=> //List.Skip是跳过日期列,我们只需要求后面团队的起始日期值
List.PositionOfAny(a, {1..2},1) //第3参数是1所以返回的是最后一个匹配值的位置
)
其中{1..2}的2可以使用List.Max(a)作为变量进行
List.Transform(最后位置, each 更改的类型[日期]{_})
List.Max(List.Transform({1..Table.ColumnCount(更改的类型)-1}, //生成列表{1..3}
//因为日期相加需要用到duration
each 自定义4{_-1}+ #duration( //自定义4代表的是日程的起始日期列表
//找到标题第1个数字代表所需要的行程日期,并转换用于计算
Number.From(Text.Start(
Table.ColumnNames(更改的类型){_},1))-1, 0, 0, 0
)
)
)
解释:求得通过行程日期的初始值+行程日期的天数,求出行程最晚日期用于生产日期列。这里只能计算行程日期为10日以内的,如果是2位数,则需要先提取数字在合并,或者判断第一个非数字的位置再提取。
List.Dates(List.Min(更改的类型[日期]),
Number.From(行程最晚日期-List.Min(更改的类型[日期]))+1,
#duration(1,0,0,0)
)
解释:我们生产了从起始日常到最终结束行程的整个日期表,后期可以通过合并查询来取得最终的表格。
List.Repeat({1},[值])
List.Dates([日期],
Number.From(Text.Start([属性],1)), 获取标题中数字天数并转换成数值
#duration(1,0,0,0) //按天增加
)
Table.FromColumns({[自1],[自2]})
List.Accumulate({0..Table.RowCount(团队表)-1}, //循环次数
转换为表, //为通过处理后的日期表
(x,y)=>Table.NestedJoin(x,
{"Column1"}, //日期表的日期列
团队表[处理后行程]{y}, //是改过标题的那个带有日历的表
{"Column1"}, //行程表的日期列
Text.From(y), //转换文本成为标题列名
JoinKind.LeftOuter //左外部合并
)
)