【问题标题】:How to shuffle / randomize internal table in SAP如何在 SAP 中打乱/随机化内部表
【发布时间】:2020-12-25 20:57:08
【问题描述】:

我的 ABAP 报告中有一个由字符串组成的内部表。现在我想打乱该表中的项目,即随机化它们在表中的顺序。

是否有任何可用的 ABAP 内置或功能模块来实现这一点,还是我必须手动随机化表格?

【问题讨论】:

  • 您是如何填充表格的?如果您通过 SQL 完成,只需将 ORDER BY 排除在等式之外,如果您使用类似 APPEND 的东西,只需将其更改为“INSERT INDEX rnd”(其中 rnd 是随机数
  • 看看F052函数组,里面有一些函数模块,用来创建不同类型的随机数(int, p)。 (我相信你必须首先调用 FM RANDOM_INITIALIZE(相同的函数组)。)最简单的方法是在内部表中有一个整数类型字段,为其分配一个随机数(例如在 1 到 10000 之间)并对内部表进行排序通过这个领域。这不会是完美的(从统计随机性的角度来看,但会做到。(我想知道这背后的业务需求是什么......)
  • @VXLozano 数据确实来自数据库表。但仅省略 ORDER BY 是不够的,因为在大多数情况下,记录的顺序仍然相同。
  • @JozsefSzikszai 记录一下:业务需求是我有一个必须执行某些任务的用户列表,但是每天应该为用户分配任务的顺序应该不同.

标签: abap internal-tables


【解决方案1】:

因此,对于 cmets,我会使用类似的方法(警告:这是伪代码,而不是解决方案......如果有人想将其扩展为“真实代码”,请随意这样做,我我很乐意将您的答案选为正确的答案,我只是想提供帮助)

data: init_table, final_table, line, newindex.

SELECT INTO TABLE init_table.

LOOP AT init_table INTO line.
  newindex = random_function( lines( final_table ) + 1 ).
  INSERT line INTO final_table INDEX newindex.
ENDLOOP.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    相关资源
    最近更新 更多