SAP BPC 清除CUBE 中的数据
原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE.
1.获取数据并清空金额
*&---------------------------------------------------------------------*
*& Form CLEAR_BPC_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> S_ENTITY 公司代码
*& --> P_YEAR 年度
*& --> P_MONTH 月份
*& --> P_CAT
*&---------------------------------------------------------------------*
FORM frm_clear_bpc_data USING p_gt_input_entity LIKE gt_input_entity
p_p_year LIKE p_year
p_p_month LIKE p_month
p_p_cat LIKE p_cat
CHANGING
p_t_bpc_data TYPE ANY TABLE . DATA: lt_axis_base TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
lt_axis TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
ls_axis_t TYPE ujo_t_members, "成员表 lt_cv_base TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
lt_cv_final TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
lt_cv_pkg LIKE TABLE OF lt_cv_base,
ls_cv LIKE LINE OF lt_cv_base,
lr_bpc_data TYPE REF TO data. FIELD-SYMBOLS <ft_pkg_data> TYPE ANY TABLE.
CREATE DATA lr_bpc_data LIKE p_t_bpc_data.
ASSIGN lr_bpc_data->* TO <ft_pkg_data>. * 准备不变的条件
CLEAR ls_cv.
LOOP AT p_gt_input_entity INTO DATA(lv_entity).
ls_cv-dimension = 'ENTITY'.
APPEND lv_entity TO ls_cv-member.
ENDLOOP.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'CATEGORY'.
APPEND s_veson-low TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'TIME'.
APPEND s_erdat-low TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'AUDITTRAIL'.
APPEND 'INPUTM' TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'SCOPE'.
APPEND 'S_NONE' TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备变化的条件
lt_cv_final = lt_cv_base. CLEAR ls_cv.
ls_cv-dimension = 'CATEGORY'.
APPEND p_p_cat TO ls_cv-member.
APPEND ls_cv TO lt_cv_final.
APPEND lt_cv_final TO lt_cv_pkg. "执行查询
TRY.
cl_ujk_model=>get_dim_list(
EXPORTING
i_appset_id = gco_appset_id
i_appl_id = gco_appl_id
i_with_measures = abap_false
IMPORTING
et_admin_dim_list = DATA(lt_dim_list)
). DATA: lt_range TYPE uj0_t_sel,
ls_range LIKE LINE OF lt_range. DATA(lo_query) = cl_ujo_query_factory=>get_query_adapter(
i_appset_id = gco_appset_id
i_appl_id = gco_appl_id ). LOOP AT lt_cv_pkg INTO DATA(lt_cv).
"转换查询条件
CLEAR:ls_range, lt_range[].
LOOP AT lt_cv INTO ls_cv.
ls_range-sign = 'I'.
ls_range-option = 'EQ'.
ls_range-dimension = ls_cv-dimension.
LOOP AT ls_cv-member INTO DATA(lv_member).
ls_range-low = lv_member.
APPEND ls_range TO lt_range.
ENDLOOP.
ENDLOOP. lo_query->run_rsdri_query(
EXPORTING
it_dim_name = lt_dim_list " BPC: Dimension List
it_range = lt_range " BPC: Selection condition
if_check_security = abap_true " BPC: Generic indicator
IMPORTING
et_data = <ft_pkg_data>
). INSERT LINES OF <ft_pkg_data> INTO TABLE p_t_bpc_data.
SORT p_t_bpc_data.
DELETE ADJACENT DUPLICATES FROM p_t_bpc_data. LOOP AT p_t_bpc_data ASSIGNING FIELD-SYMBOL(<fs_bpc_data>).
ASSIGN COMPONENT 'SIGNEDDATA' OF STRUCTURE <fs_bpc_data> TO FIELD-SYMBOL(<fv_signeddata>).
CHECK sy-subrc = 0.
<fv_signeddata> = 0.
ENDLOOP.
ENDLOOP.
CATCH cx_root INTO DATA(lr_exception).
MESSAGE |查询需要覆盖的BPC数据时报错{ lr_exception->get_longtext( ) },请联系管理员| TYPE 'E'.
ENDTRY.
ENDFORM.
2. 写回CUBE
*&---------------------------------------------------------------------*
*& Form frm_write_into_bpc
*&---------------------------------------------------------------------*
*& text 写入BPC
*&---------------------------------------------------------------------*
*& -->
*&---------------------------------------------------------------------*
FORM frm_write_into_bpc USING it_tab TYPE ANY TABLE
i_proc TYPE char1.
CLEAR: gt_message.
DATA: lo_ujo TYPE REF TO if_ujo_write_back,
l_str TYPE string,
ls_wb_param TYPE if_ujo_write_back=>gs_wb_param,
ls_wb_status TYPE ujo_s_wb_status,
ls_work_status TYPE ujr_s_work_status,
ls_audit TYPE ujr_s_update_audit,
lt_message TYPE uj0_t_message,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <lt_error_records> TYPE ANY TABLE.
CREATE DATA lr_data LIKE it_tab.
ASSIGN lr_data->* TO <lt_error_records>.
CALL METHOD cl_ujo_wb_factory=>create_write_back
RECEIVING
ro_write_back = lo_ujo.
ls_wb_param = cl_ujo_wb_factory=>default_wb_param( ).
ls_wb_param-bypass_security = abap_true.
TRY.
CALL METHOD lo_ujo->write_back
EXPORTING
i_appset_id = gco_appset_id
i_appl_id = gco_appl_id
is_wb_param = ls_wb_param
* it_records = <fs_t_data>
it_records = it_tab
IMPORTING
es_wb_status = ls_wb_status
et_error_records = <lt_error_records>
et_message = gt_message.
cl_ujk_logger=>log( '提交记录: ' && ls_wb_status-nr_submit && '条, ' && '成功记录: ' && ls_wb_status-nr_success && '条' ).
IF gt_message IS NOT INITIAL.
CALL SCREEN 400 STARTING AT 2 2 ENDING AT 120 30.
ELSE.
IF i_proc = gco_update.
MESSAGE s008.
ENDIF.
ENDIF.
CATCH cx_ujo_write_back cx_uj_static_check INTO DATA(lo_write).
l_str = lo_write->get_text( ).
MESSAGE l_str TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
ENDFORM.
SAP BPC 清除CUBE 中的数据的更多相关文章
- SSAS中CUBE行权限数据级权限控制
去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制.在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制.根据这个大牛的思 ...
- JAVA整合Redis使用redisTemplate清除库中的所有键值对数据
JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...
- SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据
这个(BOL里面)最重要的类值得一看. BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示.至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作.在业务场景中,我们也许 ...
- SAP SMARTFORMS-基于内存方式在report程序中传递数据到smartforms显示
一.准备工作 1.新建include程序 1> include程序名字:ZDD_INC_0104 2> ZDD_INC_0104 程序中的内容为 2.使用T-CODE :SE11新建两个 ...
- SAP BPC方案介绍
refer to http://sapper.blog.sohu.com/166039991.html SAP/BPC简介: 全面预算管理是联系公司战略目标与日常运营的重要纽带,它上到战略层面.下到执 ...
- SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份
SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...
- WPF中的数据验证
数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...
- C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改
在展示数据库中不知道数量的数据时怎么展示最好呢?--表格 ListView - 表格形式展示数据 ListView 常用属性 HeaderStyle - "详细信息"视图中列标头的 ...
- LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对
回到目录 这个文章写的有点滞后了,呵呵,因为总想把之前不确定的东西确定了之后,再写这篇,之前的LINQ-to-SQL那点事,请点这里. LINQ-to-SQL中的数据缓存与应对 Linq-to-SQL ...
随机推荐
- MySQL存储引擎、基础数据类型、约束条件
MySQL存储引擎 存储引擎 # 存储引擎可以堪称是处理数据的不同方式 # 查看存储引擎的方式 show engines; # 需要掌握的四个存储引擎 MyISAM MySQL5.5之前的默认的存储引 ...
- [翻译] Cassandra 分布式结构化存储系统
Cassandra 分布式结构化存储系统 摘要 Cassandra 是一个分布式存储系统,用于管理分布在许多商品服务器上的大量结构化数据,同时提供无单点故障(no single point of fa ...
- node.js - 包、express
首先,要先在这里分享一下我的喜悦,从昨天开始其实一直都在喜悦当中的,我收到了我的第一份offer,这感觉不摆了,比第一桶金都还舒服,虽然我还没收到第一桶金哈哈,不过offer都得了应该也快了. 今天的 ...
- 移动端input解决键盘问题 方案1
$('body').on('focusin', 'input, textarea', function(event) { if(navigator.userAgent.indexOf('Android ...
- JavaScript学习③
3. 属性: PI 6. Number 7. String 8. RegExp:正则表达式对象 1. 正则表达式:定义字符串的组成规则. 1. 单个字符:[] 如: [a] [ab] [a-zA-Z0 ...
- redis:缓存穿透、缓存击穿、缓存雪崩
缓存穿透的解决方案(空标记) 缓存穿透是指,在数据存储系统中不存在的记录,不会被存储到缓存中.这种记录每次的查询流量都会穿透到数据存储层.在高流量的场景下,不断查询空结果会大量消耗数据查询服务的资源, ...
- Mysql基本操作语句 增-删-改-查
增 INSERT INTO 表名(属性名1,属性名2) VALUES(值1,值2) 删 DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子 ...
- STM32 DMA(UART)
转载自https://blog.csdn.net/as480133937/article/details/104827639/
- 数据结构_C语言_单链表
# include <stdio.h> # include <stdbool.h> # include <malloc.h> typedef int DataTyp ...
- 127_Power Pivot&Power BI DAX计算订单商品在库时间(延伸订单仓储费用)
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...