【问题标题】:Recursion algorithm for multilevel report多级报表的递归算法
【发布时间】:2019-01-16 19:48:23
【问题描述】:

我目前正在开发一个多级 SSRS 报告,并且我正在努力使用该算法。我开发了一个递归类,如下所示,但级别数不正确。我希望父记录(由 a、b 和 c 表示)显示子记录,以便子记录的级别 = (parentRecLevel+1)。现在,级别值只是增加 1。有人有什么建议吗?

protected BOMLevel getBomLevelItem(str itemId, int numLevel, boolean firstRec)
    while select tmpBOM
    {
        bomLevel = this.getBomLevelItem(bomLevel.ItemId, bomLevel.Level, false);
    }

Current Outcome(其中 b1c1c2bc 的子项 分别):

1    a
2    b
2    b1
3    c
4    c1
5    c2

想要的结果:

1    a
2    b
3    b1
2    c
3    c1
3    c2

【问题讨论】:

  • 一般情况下,请仅将递归作为最后的手段,它几乎总是低效的。看看是否有可行的递归替代方案。
  • @JosephDoggie 递归通常是表达解决方案的最直观的方式。因此,这是找到问题的有效解决方案的好方法。一旦你得到一个可行的解决方案,你就可以担心它的效率。由于解决方案可能效率低下而避免递归是过早优化的练习。使程序工作;然后让它高效。

标签: algorithm recursion reporting-services x++


【解决方案1】:

TLDR:不要重新发明轮子,使用现有的算法和框架。

我假设您的问题不是针对训练练习,而是针对现实世界的问题。如果这是一个练习,在回到 x++ 之前,尝试在一个大社区中使用您选择的易于使用的语言很好地掌握递归。

您的递归方法看起来不完整,因为在每次递归中,您都会遍历tmpBom 的所有记录,这(除非您在其他地方修改该表中的记录)没有意义并且永远不会终止。我也看不出这种方法如何产生你描述的结果。我建议您查看一些递归算法培训材料,以了解递归的基本部分。

您标记了问题,语法看起来也很像。不幸的是,您没有添加您正在使用的 版本的信息,但我会假设,因为它是目前最常用的版本。

在这个版本中,已经有一个开箱即用的 SSRS 报告,它将向您展示物料清单的结构。您可以在库存管理>报告>物料清单>行调用该报告。修改此报告应该相当容易,以便在报告尚未满足您的要求时也显示级别。

如果您仍需要实现自己的解决方案,请查看 BOMSearch 类及其子类。它用于多个地方(检查交叉引用),也可用于扩展/分解物料清单。

另请注意,有很多文章试图解释如何在 x++ 代码中扩展或分解物料清单,但与互联网上的所有内容一样,请注意:其中大多数不完整或简单错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多