我正在拼命寻找一种有效的方法 - 如果有的话 - 来解决 T-SQL 中的某种递归任务(我可以成功地在 excel 和纸上用迭代解决方案对其进行建模 - 就像许多 CMA 会举一个小例子一样,在迭代中相互服务的支持单元对之间重新分配成本份额,并将平衡单元的未分配成本剩余最小化到一个合理的小数量以停止迭代/递归)。
现在我试图找到一个好的可扩展解决方案(或至少是一种可行的方法)如何在 T-SQL 中为管理会计领域的这种典型计算任务实现相同的目标:当一些内部支持单位相互服务时(和产生定期成本,如工资等)最终生产 2 或 3 个最终产品作为一家公司,因此它们各自在内部产生的支持间接费用中的份额需要合理(根据一些物理基础分布,让比如说 - 在成本计算结束时分配给这些产品成本的每个人的小时数。
如果没有互惠服务,这将非常简单:一个支持单位在此期间向其他支持单位提供一些服务(并且需要在此服务数量流中分配相应的成本),第二个和第三个支持单位做同样的事情其他支持同行的事情,在他们的所有成本被适当地计入生产成本并在他们共同服务的各个产品之间分摊之前(并非所有支持单位都平等,我在这里使用基于活动的成本核算方法)......并且在实际情况可能不仅仅是 2-3 个单位,可以在 Excel 或纸上手动解决。所以,它确实需要一些动态参数算法(根据一些 qty-measure/% 方矩阵分配表在服务期内为 X-1 个同行提供服务的 X 个支持单元和 Y 个产品)将它们的周期成本分散到每个产品的一个单元上结束。最好是在 SQL 中以某种方式原生,而不使用外部 .NET 或其他程序集引用。
一些数字示例:
- 3 个支持单位 A、B、C 在此期间各自产生了 100 美元、200 美元、300 美元的费用,每个单位分别工作了 50 个工时
- A 单元服务 B 单元 10 小时和 C 单元 5 小时,B 单元服务 A 单元 5 小时,C 单元服务 A 单元 3 小时和 B 单元 10 小时
- 其余支持单位的工作时间(A 单位 35 小时:P1 30%,P2 70%,B 单位 45 小时:P1 35%,P2 65%,C 单位 37 小时 P2 100%)他们花费在服务于两种产品(P1 和 P2)的输出上;他们的这部分直接时间/精力很容易分配给产品——但由于相互提供服务,支持单位的部分成本需要转移到相应的产品成本池中,这与他们分配产品的直接时间不相等(需要调整步骤 2 效果的混合系数)。
我可以通过迭代算法和使用 VBA 数组在 excel 中解决这个问题:(a)每个支持单元的期间成本向量(最终重新分配给产品并保留 0),(b)自助服务系数的 2dim 数组/矩阵支持单位之间(基于人工 - 一个到另一个),(c) 支持单位为每个产品提供的直接 hrs 服务的 2dim 数组/矩阵,(d) 1 美元的最小可容忍误差(停止单位中未分配成本的剩余部分迭代)对于只有 2 或 3 个元素(虽然仍然可以在纸上手动证明),这是一种可行的方法,但是一旦我在矩阵中有 10-20 多个支持单元和许多产品,就不可能手动证明正确的解决方案;由于其他原因,我想从 excel 和 VBA 切换到 MS SQL server 和 t-sql。
由于这样的商业案例根本不是新的,我希望更有经验的同事能提出如何最好地解决这个问题的建议——我相信之前一定有解决这个任务的方法(不是在纯编程环境/外部代码中) . 我正在考虑结合 CTE(递归)、表变量和聚合窗口函数 - 但犹豫/挣扎如何最好/准确地将所有拼图元素放在一起,以便它真正可扩展以适应我潜在增长的单元/产品矩阵维度。对于我目前的水平,这有点令人兴奋,所以我会很感激你的建议。