您的 Excel 计算没有错但仍然给出错误结论
在纯串联情况下,各段平均值之和是精确相等的;这是期望值的线性,因此没有人怀疑表格的正确性。可是,一旦流程包含一个门(两个步骤必须完成)、返工循环或分工处理,总时长就成为各单步时长的凸函数。根据詹森不等式,真实的平均值会更高;在一次由六个步骤每步均为3天的模拟中,高出10%,P90高出52%。更严重的是第二个错误:平均值并不能说明该值被保持的频率。承诺的日期应当以P90来表示,而不是用平均值。

Inhaltsverzeichnis
每个人都认识这个 Excel。左边是流程步骤,右边是平均持续时间,下面是总和。六个步骤,每步平均三天,总共十八天的通过时间。这个数字随后被写进报价、产能计划或对客户的承诺。
然后时间更长了。不总是,但太常见。常见的解释是:“估算太乐观。”这很省事,但大多是错误的。估算可以完全正确,而计算结果仍然偏离。
先说不舒服的一面:Excel 并没有算错。
先为 Excel 辩护
如果一个流程真的是一条链(先一步,然后二步,然后三步,没有等待时间,没有共享资源),那么各步骤均值的和就是总和的均值,且是精确的。这不是近似值也不是经验法则,而是期望值的线性性。无论各分布多么偏斜,这条规律都成立。
我们做了复算:六个步骤,每步持续时间右偏,均值都是三天,模拟了 400000 个流程。
[
{ "label": "Excel: Summe der Mittelwerte", "value": "18,0", "unit": "Tage" },
{ "label": "Simulation: echter Mittelwert", "value": "18,0", "unit": "Tage", "tone": "positive", "note": "Abweichung: 0 %" },
{ "label": "P90 der Simulation", "value": "24,3", "unit": "Tage", "tone": "critical", "note": "+35 % gegenüber dem Excel" },
{ "label": "Vorgänge über 18 Tagen", "value": "44", "unit": "%", "tone": "critical" }
]
Excel 精确地命中均值。**也正因此没有人怀疑它。**它在一个问题上是对的。但那并不是人们真正关心的问题。
因为此处第二行已经摆在眼前:在 44% 的情况下,耗时超过十八天。一个均值并不能说明它被保持的频率。它是对许多个流程的平均,而不是对您当前承诺的那个单个流程的断言。
旁边的数字是 P90。它具体意味着什么以及用哪个百分位来进行产能规划,请参见 FlowVisual:P10, P50, P90 richtig lesen。那里有统计学说明,这里是它的后果:即便各步骤均值之和是正确的,这个数也常常不是用于承诺的合适数字。
只是:您的流程不是一条链
现实中几乎不存在纯粹的链式流程。几种构件在几乎所有流程中都会出现。每一种都会打破那种计算。
**并行门。**两件事必须完成后才能继续:在发出报价之前,既要完成技术澄清,又要完成信用审查。两者的平均耗时都是三天。Excel 写三天。但现实中要等待两者中更慢的那个,而它的平均并不是三天。
**循环。**某个步骤有时需要重复。十五个百分点的返工听起来像是四舍五入误差,但并非如此。
**排队。**一个人负责六个步骤中的两步。Excel 里显示的是她的纯处理时间。没写的是:流程在她桌上等待的时间,因为她在做别的事。
相同的步骤时长,相同的每步均值三天。只有结构不同:
{
"caption": "Abweichung der echten Dauer vom Excel-Wert, je Prozessbaustein (Simulation, je 300.000 Vorgänge)",
"unit": "%",
"data": [
{ "label": "Kette: A, dann B, dann C", "value": 0, "tone": "positive" },
{ "label": "Schleife: 15 % Nacharbeit", "value": 18 },
{ "label": "Tor: A und B müssen fertig sein", "value": 33 },
{ "label": "Schleife: 30 % Nacharbeit", "value": 43 },
{ "label": "Tor: A, B und C müssen fertig sein", "value": 54 },
{ "label": "Warteschlange bei 67 % Auslastung", "value": 124, "tone": "critical" },
{ "label": "Warteschlange bei 80 % Auslastung", "value": 231, "tone": "critical" },
{ "label": "Warteschlange bei 90 % Auslastung", "value": 531, "tone": "critical" }
]
}
在此列中,排队是最震撼的项。67% 的利用率多数人觉得很宽松。但在那儿,真实的停留时间已经是纯处理时间的两倍多。在 90% 时则是六倍。这不是糟糕的组织,这是数学:利用率越接近 100%,等待时间增长得越猛。且增长不是线性的,而是呈爆炸性增长。
把员工利用率压到 90% 并不是高效,而是把等待时间从自己的账本转嫁到了客户的通过时间上。
为什么误差总有同一方向
图中模式不是偶然,有个名称。
Excel 计算的是 f(均值):在每一步代入平均值再算流程。现实是真实的 均值( f(X) ):让每个流程都以真实波动的持续时间运行完毕,然后再算平均。
两者不同。根据詹森不等式:若函数是凸的,则结果的均值大于均值的结果。
现在关键观察:**并行门、循环和排队三者都是凸的。**取最大值是凸的。几何重复是凸的。排队尤其凸。因此图中的偏差从未为负。
也就是说:Excel 的误差**不是噪声,而是偏向性。**并非有时高有时低,而是系统性地过于乐观。流程结构越复杂,这个偏差越大。
同一流程,两种计算方式
取一个真实的六步流程:步骤二和三并行且必须都完成;步骤五有 15% 的返工。其他没有特殊情况:没有排队,也没有共享人员。每步均值三天。
Excel 代入均值得出 15 天。这个计算是严谨的,并行门也正确建模了。
[
{ "label": "Excel: Mittelwert je Schritt", "value": "15,0", "unit": "Tage" },
{ "label": "Simulation: Mittelwert", "value": "16,5", "unit": "Tage", "tone": "critical", "note": "+10 %" },
{ "label": "Simulation: P90", "value": "22,8", "unit": "Tage", "tone": "critical", "note": "+52 %" },
{ "label": "Termin von 15 Tagen gehalten", "value": "43", "unit": "%", "tone": "critical" }
]
承诺的是 15 天。只有 43% 的情况下能达成。
这就是要点。不是说 Excel 偏离了 10%(这还能接受),而是它给了一个看起来像承诺的数字,但实际上是掷硬币。用这个数字做计划,就是在为一个不存在的流程做计划。
下面您可以自己运行模拟。模拟不仅显示耗时,还显示在何种情形下哪一步会成为瓶颈。一旦情形改变,答案也会改变。
唯一一个方向相反的构件
如果每个凸结构都让 Excel 过于乐观,那么是否存在凹的结构,会让均值计算变得悲观?
有。也是为什么最便宜的改进往往不是软件。
设想两名办事员。各自负责不同领域,各有自己的排队队列。一人负责新客户,另一人负责老客户。速度相同,利用率相同。
现在只改一件事:**合并排队。**谁空闲就接下一个案件,无论是哪类。两人相同,两步处理时间相同,总工作量相同。
{
"caption": "Verweilzeit bei gleicher Kapazität und gleicher Last: getrennte gegen gemeinsame Warteschlange (Simulation)",
"unit": "Tage",
"data": [
{ "label": "Zwei Spezialisten, je eigene Schlange (Mittel)", "value": 20.7, "tone": "critical" },
{ "label": "Zwei Spezialisten, je eigene Schlange (P90)", "value": 43.5, "tone": "critical" },
{ "label": "Zwei Generalisten, eine Schlange (Mittel)", "value": 12.5, "tone": "positive" },
{ "label": "Zwei Generalisten, eine Schlange (P90)", "value": 23.9, "tone": "positive" }
]
}
停留时间下降了 40%,P90 下降了 45%。没有增加人手。没有新增软件行。没有每月付费的工具。
原因依然是数学,但方向相反:两条独立队列不能互相帮助。一方空闲而另一方堆积的工单,其空闲时间无法重复利用。合并队列消除了这种损失。多个空闲处理者取最小值的行为是凹函数,因此符号反转。
对我们来说,这是整篇文章中最诚实的结论。如果分析显示您的瓶颈是一个排队,那么合适的建议往往不是:“买软件。”而是:“把两个科室合并为一个。”这不花您钱,却会让我们少一个项目。
对实践的启示
第一:点估值不应出现在流程分析中。 一个持续时间是一个区间,不是一个数字。每步记录一个乐观值、一个典型值和一个悲观值。比起只猜一个平均值,多花不了一分钟。这是唯一能用于计算的输入。
第二:永远不要承诺均值。 均值是对全年平均的描述,不是对下一个流程的承诺。交期应该以 P90 给出。承诺均值等于承诺每第二次都可能违约。
第三:结构比估算更重要。 即便您将各步骤时长估到 10% 的精度,但如果忽视了并行门和排队,错得可能成倍。反之,只要结构建模正确,用粗略估算也能出乎意料地接近真实结果。
第四:利用率不是目标。 九十个百分点的利用率听起来像是好管理,但它正是导致通过时间爆炸的原因。
这就是为什么 FLOW 有一个 O
我们的方法叫 FLOWREFY,前四个字母是测量:Find — 哪些流程值得关注。Lay bare — 现状以欧元计的成本。Observe — 模拟。Weigh — 权衡。
F、L 和 W 我们提供免费的计算器。对于 O 则没有。不是我们把它放在付费墙后,而是模拟无法塞进一个输入框。它需要流程的结构:谁在等谁、谁和谁共享、哪里会有返工。正是 Excel 的求和公式中不存在的那些结构,也是造成 15 天与 22.8 天差异的根本所在。
为此我们开发了 FlowVisual:画出流程,填写区间,演算情形。它不仅告诉您耗时,还会在需求上升时指出哪里会卡住,以及您当前想要解决的瓶颈在负载下是否仍然是同一个。
如果您只想知道您一年中最昂贵的瓶颈成本,从这里开始:hier。免费,十分钟可办成。
方法论说明
本文中所有数字来自 Monte Carlo 模拟,而非客户项目。各步骤时长服从对数正态分布,均值为 3.0 天,散布使得变异系数约为 0,65。分布呈右偏,正如实际的处理时间:不能小于零,但可以向上长尾。每个构件模拟了 300000 至 400000 个流程,排队使用 80000 次到达并剪切了稳定期。
具体百分比取决于这些假设。方向不取决于它们:方向来自詹森不等式,对任意大于零的波动都成立。若用更窄的分布计算,偏差会更小,但符号永远不会反过来。