人员轮换排班是企业管理中的一项基础但重要的工作,本篇文章将以模拟案例的形式来介绍如何在PowerBI中实现这一目的。
问题描述
某工厂小组有A、B、C、D、E、F、G七名员工,为平衡工作与生活,现在需要对他们在接下来30天的工作进行排班。排班规则为:一个班次包含四天,每次轮换两人,即班次为ABCD, CDEF, EFGA ,GABC…, 依此循环。
具体问题如下图所示:
本案例的初始数据如下:
员工表:
uid |
---|
a |
b |
c |
d |
e |
f |
g |
若需其它辅助表等,可自行创建并建模。
解题要点
可以使用GENERATE
函数与GENERATESERIES
函数来对员工表进行复制追加,然后迭代每个班次的开头位置并使用窗口函数进行定位及取值,最后进行文本拼接与字符长度控制即可。
解决方案
首先,数据模型如下图所示:
然后,创建如下度量值:
排班结果 =
VAR N = 30
VAR Delimited = " , "
RETURN
LEFT(
CONCATENATEX(
FILTER(GENERATESERIES(1,999,2),ISODD([Value])),
CONCATENATEX(
WINDOW(
[Value],ABS,[Value]+3,ABS,
GENERATE(GENERATESERIES(1,100),ALL('员工表'[uid])),
ORDERBY([Value],ASC,'员工表'[uid])
),
'员工表'[uid]
),
Delimited
),
N+LEN(Delimited)*INT(N/4)
)
然后创建一个矩阵,再将上面的度量值放入卡片图或形状图形的文本输入框中即可,如下图所示:
总结
以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!
PBI/DAX技术交流群(QQ):344353627