1

現在、期間1、2、3の別のファイルから売上を取得するIDescriptorがあります。期間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の現在のファイル(このディクショナリファイルのファイル)から取得されます。これは、Salesのデータ(<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

ダンの答えに欠けている唯一のことは、COSTフィールドを取得するために別のTRANSが必要であるということです。したがって、TRANS(SAS1、ITEM、3、'X');

EXTRACTの最初の操作の後。

于 2012-04-26T12:42:53.793 に答える