1

目前,我有一个 IDescriptor 可以从另一个文件中提取 1、2、3 期间的销售额。我希望能够从期间 1、2、3 中提取成本并减去总计以获得利润。

当前的 I-Descriptor 语句是:

TRANS(SAS1,ITEM,4,'X');@1<1,1,1>+@1<1,1,2>+@1<1,1,3>
  • 4 = 销售额
  • 3 = 成本
  • @1<1,1,1> = 周期 1
  • @1<1,1,2> = 周期 2
  • @1<1,1,3> = 周期 3
  • @1<1,1,4> = 周期 4
4

2 回答 2

1

你正在寻找EXTRACT

因此,请尝试以下 loc 属性:

TRANS(SAS1,ITEM,4,'X');EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3)

下一个问题对我来说并不完全清楚,所以如果我做出了不正确的假设,请告诉我。

成本来自属性(字段)3 的当前文件(该字典文件所在的文件)。它与销售数据的格式相同(<1,1,1 到 3>)。在这种情况下,您需要使用@RECORD。

TRANS(SAS1,ITEM,4,'X');EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3);EXTRACT(@RECORD,1,1,1)+EXTRACT(@RECORD,1,1,2)+EXTRACT(@RECORD,1,1,3);@2-@3

所以,让我们分解一下:

  • 从文件 SAS1 中的记录 ITEM 中读取属性 4。如果项目不存在,则返回一个空字符串。将其保持在位置 1 (@1):

TRANS(SAS1,ITEM,4,'X');

  • 从位置 1 的值中提取多个子值 1 到 3,然后将它们加在一起 ​​()。将其保持在位置 2:

EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3);

  • 从当前记录中提取多个子值 1 到 3 并将它们相加。将其保持在位置 3:

EXTRACT(@RECORD,1,1,1)+EXTRACT(@RECORD,1,1,2)+EXTRACT(@RECORD,1,1,3);

  • 最后,从位置 2 的值(总销售额)中减去位置 3 的值(总成本)。由于这是最后一个位置,因此返回结果:

@2-@3

于 2012-04-10T23:49:09.480 回答
0

丹的答案中唯一缺少的是您需要另一个 TRANS 来获取您的 COST 字段,因此 TRANS(SAS1,ITEM,3,'X');

在对 EXTRACT 进行第一次操作之后。

于 2012-04-26T12:42:53.793 回答