业务需要,成绩一栏里,有数值有文字。文字固定。
导入SAP 时,我就遇到了困难,要是关键指标。这个文字就录入错误。要是字符型的。那么怎么计算了。信息对象都不好建
按月导入,所以服务店与时间共同构成KEY。这样才不会在DSO覆盖。
解决方法:字符串导入,上传到DSO时分离出数值在新的信息对象ZCJ,原来的就在ZCJ1。这样两列。
这样用原来的列做过滤,剩下的用ZCJ来做计算就好。问题解决。
过程:
在数据源时其实可以不建信息对象。设置一个char类型就好 。信息对象模板其实可以为空。不一定非要填写。
建好DSO,创建转换:
我一开始想法错误了。我把ZCJ弄成纯数值 ,顺便以为ZCJ1 以为也要弄成纯文字型的。其实不必,它原来就是不考核,带一些数值没关系。它只是记录,不参与计算。顺便过滤。都不用操作。
开始以为要彻底把一件东西分开。其实不用,只要从中原来里分离出数值就好。因为是多出来一列。同一条数据。明白了吧。
那这样就直接在ZCJ里写例程就好
这样用一个字符串转数值函数就可以把数值带出来,字符串变成0。形成新列
DATA: OUT TYPE _ty_s_TG_1-/BIC/ZCJ. *定义一个接受函数的值 (这个重要) CALL FUNCTION 'ZUNITS_STRING_CONVERT' *字符转换的函数 EXPORTING UNITS_STRING = SOURCE_FIELDS-ZCJ1 *输入的值 DCPFM = 'X' *类型 * MLLN = 'M' * TSND = 'T' IMPORTING UNITS = OUT * 输出 EXCEPTIONS INVALID_TYPE = 1 OTHERS = 2 *判断类型 . IF SY-SUBRC = 0. *等于0 ,表示执行成功 RESULT = OUT. *输出数值 * Implement suitable error handling here ELSEIF SY-SUBRC = 1. * 失败类型,表示文字不考核。零 RESULT = 0. ELSEIF SY-SUBRC = 2. * 其他的原因,返回一下。 raise exception type CX_RSROUT_ABORT. ENDIF.
完成