最近的几个需求让我对ACDOCT和FAGLFLEXT这两个财务相关表(准确地说是视图)产生了一些了解,同时也发现某些开发同行和业务顾问并没有认识到这些东西。因此我打算从技术角度来说明一下这两个视图在S4中的实际面貌。当然因为我并不了解FICO方面的任何业务知识,所以也只是进行技术角度的说明。

本文内容基于 S/4 1709版本;某些内容可能和其他版本不是完全符合,特别是具体的DDL代码部分。

本文链接:http://www.cnblogs.com/hhelibeb/p/8629942.html

财务报表开发中经常会出现有关期初余额和本期发生额的需求,传统上获取期初余额的方式是从FAGLFLEXT或ACDOCT中获取结转余额(HSLVT),再加上各期发生额(HSL01, HSL02....)。

比如要获取公司1000的2018年3月的期初余额,ABAP代码的写法是:

  1. SELECT SUM( ( hslvt + hsl01 + hsl02 ) ) FROM faglflext WHERE rbukrs = ''
  2. AND ryear = ''
  3. INTO @DATA(l_balance).

这只是段简单的示例代码,实际需求中可能要按科目等条件取出各个期间分组汇总。并且,为了适应动态的查询条件,通常要使用Field Symbol,在内表中对数据进行累加操作,颇为繁琐。

那么,HSLVT和HSL01, HSL02....等数据是从哪里来的呢?如果把FAGLFLEXT和ACDOCT视为数据库表,读者可能会认为,它们是通过某些结转操作,由系统汇总计算后得来并存储到数据库中的。但实际上,FAGLFLEXT和ACDOCT都只是视图,而非透明表。可以理解成,它们当中的数据不是数据库中既有的,而是和各种报表程序一样、是对其它表的数据进行实时处理后临时生成的结果。

打开SE11可以看到:

可以看到,它们实际上是ABAP CDS视图。如果不了解ABAP CDS视图的话,可以暂时把它理解成使用SQL语言建立的数据模型,通过使用注解,还能为它赋予其它能力。

推荐通过Eclipse来查看CDS视图的定义,具体操作方式不提。

CDS视图中的数据通常是从透明表中取得的,这里以FAGLFLEXT为例:

观察视图的DDL源,寻找其中的FROM关键字:

  1. @AbapCatalog.sqlViewName: 'FAGLFLEXT'
  2. @AccessControl.authorizationCheck: #NOT_REQUIRED
  3. @ObjectModel.usageType.serviceQuality: #X
  4. @ObjectModel.usageType.sizeCategory: #XL
  5. @ObjectModel.usageType.dataClass: #MIXED
  6. @EndUserText.label: 'FAGLFLEXT (Compatibility View) '
  7. @AbapCatalog.preserveKey: true
  8.  
  9. define view v_faglflext_view
  10. as
  11. select key rclnt, key ryear,
  12. key objnr00, key objnr01, key objnr02, key objnr03, key objnr04, key objnr05, key objnr06, key objnr07, key objnr08,
  13. key drcrk, key rpmax,
  14. activ, rmvct, rtcur, runit, awtyp,
  15. rldnr, rrcty, rvers, logsys, racct, cost_elem, rbukrs,
  16. rcntr, prctr, rfarea, rbusa, kokrs, segment, zzpaytype, zzinvunit, zzempnum, ps_posid, aufnr, kunnr, lifnr,
  17. //<$VF>
  18. //<$FIELDS>
  19. //<$VF>
  20. scntr, pprctr, sfarea, sbusa, rassc, psegment,
  21. tslvt, tsl01, tsl02, tsl03, tsl04, tsl05, tsl06, tsl07, tsl08, tsl09, tsl10, tsl11, tsl12, tsl13, tsl14, tsl15, tsl16,
  22. hslvt, hsl01, hsl02, hsl03, hsl04, hsl05, hsl06, hsl07, hsl08, hsl09, hsl10, hsl11, hsl12, hsl13, hsl14, hsl15, hsl16,
  23. kslvt, ksl01, ksl02, ksl03, ksl04, ksl05, ksl06, ksl07, ksl08, ksl09, ksl10, ksl11, ksl12, ksl13, ksl14, ksl15, ksl16,
  24. oslvt, osl01, osl02, osl03, osl04, osl05, osl06, osl07, osl08, osl09, osl10, osl11, osl12, osl13, osl14, osl15, osl16,
  25. mslvt, msl01, msl02, msl03, msl04, msl05, msl06, msl07, msl08, msl09, msl10, msl11, msl12, msl13, msl14, msl15, msl16,
  26. timestamp
  27. from faglflext_bck where rrcty = ''
  28. union all
  29. select
  30. key rclnt,
  31. key cast(ryear as gjahr) as ryear,
  32. key cast(objnr00 as g_objnr) as objnr00,
  33. key cast(objnr01 as g_objnr) as objnr01,
  34. key cast(objnr02 as g_objnr) as objnr02,
  35. key cast(objnr03 as g_objnr) as objnr03,
  36. key cast(objnr04 as g_objnr) as objnr04,
  37. key cast(objnr05 as g_objnr) as objnr05,
  38. key cast(objnr06 as g_objnr) as objnr06,
  39. key cast(objnr07 as g_objnr) as objnr07,
  40. key cast(objnr08 as g_objnr) as objnr08,
  41. key cast(drcrk as shkzg) as drcrk,
  42. key cast(rpmax as rpmax) as rpmax,
  43. cast(activ as acti1) as activ,
  44. cast(rmvct as rmvct) as rmvct,
  45. cast(rtcur as rtcur) as rtcur,
  46. runit,
  47. cast(awtyp as awtyp) as awtyp,
  48. cast(rldnr as fagl_rldnr) as rldnr,
  49. cast(rrcty as rrcty) as rrcty,
  50. cast(rvers as rvers) as rvers,
  51. cast(logsys as logsys) as logsys,
  52. cast(racct as racct) as racct,
  53. cast(cost_elem as kstar) as cost_elem,
  54. cast(rbukrs as bukrs) as rbukrs,
  55. cast(rcntr as kostl) as rcntr,
  56. cast(prctr as prctr) as prctr,
  57. cast(rfarea as fkber) as rfarea,
  58. cast(rbusa as gsber) as rbusa,
  59. cast(kokrs as kokrs) as kokrs,
  60. cast(segment as fb_segment) as segment,//<$VF>
  61. //<$FIELDS>
  62. //<$VF>
  63. cast(scntr as skost) as scntr,
  64. cast(pprctr as pprctr) as pprctr,
  65. cast(sfarea as sfkber) as sfarea,
  66. cast(sbusa as pargb) as sbusa,
  67. cast(rassc as rassc) as rassc,
  68. cast(psegment as fb_psegment) as psegment,
  69. cast(tslvt as tslvt12) as tslvt,
  70. cast(tsl01 as tslxx12) as tsl01,
  71. cast(tsl02 as tslxx12) as tsl02,
  72. cast(tsl03 as tslxx12) as tsl03,
  73. cast(tsl04 as tslxx12) as tsl04,
  74. cast(tsl05 as tslxx12) as tsl05,
  75. cast(tsl06 as tslxx12) as tsl06,
  76. cast(tsl07 as tslxx12) as tsl07,
  77. cast(tsl08 as tslxx12) as tsl08,
  78. cast(tsl09 as tslxx12) as tsl09,
  79. cast(tsl10 as tslxx12) as tsl10,
  80. cast(tsl11 as tslxx12) as tsl11,
  81. cast(tsl12 as tslxx12) as tsl12,
  82. cast(tsl13 as tslxx12) as tsl13,
  83. cast(tsl14 as tslxx12) as tsl14,
  84. cast(tsl15 as tslxx12) as tsl15,
  85. cast(tsl16 as tslxx12) as tsl16,
  86. cast(hslvt as hslvt12) as hslvt,
  87. cast(hsl01 as hslxx12) as hsl01,
  88. cast(hsl02 as hslxx12) as hsl02,
  89. cast(hsl03 as hslxx12) as hsl03,
  90. cast(hsl04 as hslxx12) as hsl04,
  91. cast(hsl05 as hslxx12) as hsl05,
  92. cast(hsl06 as hslxx12) as hsl06,
  93. cast(hsl07 as hslxx12) as hsl07,
  94. cast(hsl08 as hslxx12) as hsl08,
  95. cast(hsl09 as hslxx12) as hsl09,
  96. cast(hsl10 as hslxx12) as hsl10,
  97. cast(hsl11 as hslxx12) as hsl11,
  98. cast(hsl12 as hslxx12) as hsl12,
  99. cast(hsl13 as hslxx12) as hsl13,
  100. cast(hsl14 as hslxx12) as hsl14,
  101. cast(hsl15 as hslxx12) as hsl15,
  102. cast(hsl16 as hslxx12) as hsl16,
  103. cast(kslvt as kslvt12) as kslvt,
  104. cast(ksl01 as kslxx12) as ksl01,
  105. cast(ksl02 as kslxx12) as ksl02,
  106. cast(ksl03 as kslxx12) as ksl03,
  107. cast(ksl04 as kslxx12) as ksl04,
  108. cast(ksl05 as kslxx12) as ksl05,
  109. cast(ksl06 as kslxx12) as ksl06,
  110. cast(ksl07 as kslxx12) as ksl07,
  111. cast(ksl08 as kslxx12) as ksl08,
  112. cast(ksl09 as kslxx12) as ksl09,
  113. cast(ksl10 as kslxx12) as ksl10,
  114. cast(ksl11 as kslxx12) as ksl11,
  115. cast(ksl12 as kslxx12) as ksl12,
  116. cast(ksl13 as kslxx12) as ksl13,
  117. cast(ksl14 as kslxx12) as ksl14,
  118. cast(ksl15 as kslxx12) as ksl15,
  119. cast(ksl16 as kslxx12) as ksl16,
  120. cast(oslvt as oslvt12) as oslvt,
  121. cast(osl01 as oslxx12) as osl01,
  122. cast(osl02 as oslxx12) as osl02,
  123. cast(osl03 as oslxx12) as osl03,
  124. cast(osl04 as oslxx12) as osl04,
  125. cast(osl05 as oslxx12) as osl05,
  126. cast(osl06 as oslxx12) as osl06,
  127. cast(osl07 as oslxx12) as osl07,
  128. cast(osl08 as oslxx12) as osl08,
  129. cast(osl09 as oslxx12) as osl09,
  130. cast(osl10 as oslxx12) as osl10,
  131. cast(osl11 as oslxx12) as osl11,
  132. cast(osl12 as oslxx12) as osl12,
  133. cast(osl13 as oslxx12) as osl13,
  134. cast(osl14 as oslxx12) as osl14,
  135. cast(osl15 as oslxx12) as osl15,
  136. cast(osl16 as oslxx12) as osl16,
  137. cast(mslvt as mslvt12) as mslvt,
  138. cast(msl01 as mslxx12) as msl01,
  139. cast(msl02 as mslxx12) as msl02,
  140. cast(msl03 as mslxx12) as msl03,
  141. cast(msl04 as mslxx12) as msl04,
  142. cast(msl05 as mslxx12) as msl05,
  143. cast(msl06 as mslxx12) as msl06,
  144. cast(msl07 as mslxx12) as msl07,
  145. cast(msl08 as mslxx12) as msl08,
  146. cast(msl09 as mslxx12) as msl09,
  147. cast(msl10 as mslxx12) as msl10,
  148. cast(msl11 as mslxx12) as msl11,
  149. cast(msl12 as mslxx12) as msl12,
  150. cast(msl13 as mslxx12) as msl13,
  151. cast(msl14 as mslxx12) as msl14,
  152. cast(msl15 as mslxx12) as msl15,
  153. cast(msl16 as mslxx12) as msl16,
  154. cast(timestamp as timestamp) as timestamp
  155. from FGL_FAGLFLEXT

可以发现这个视图结合了2个源。其一是FAGLFLEXT_BCK,查询可知这是旧数据的备份表;另一个是FGL_FAGLFLEXT,

打开FGL_FAGLFLEXT,发现它还是个CDS视图(因为完整定义过长,只截取了部分代码,下同):

  1. @AbapCatalog.sqlViewName: 'FGLV_FAGLFLEXT'
  2. @AccessControl.authorizationCheck: #NOT_REQUIRED
  3. @ObjectModel.usageType.serviceQuality: #X
  4. @ObjectModel.usageType.sizeCategory: #XL
  5. @ObjectModel.usageType.dataClass: #MIXED
  6. @EndUserText.label: 'Compatibility view for FAGLFLEXT'
  7. define view FGL_FAGLFLEXT as select from FGL_GLTT2
  8. {
  9. key rclnt,
  10. key ryear,
  11. key cast(objnr00 as abap.int4(10)) as objnr00,
  12. key cast(objnr01 as abap.int4(10)) as objnr01,
  13. key cast(objnr02 as abap.int4(10)) as objnr02,
  14. key cast(objnr03 as abap.int4(10)) as objnr03,
  15. key cast(objnr04 as abap.int4(10)) as objnr04,
  16. key cast(objnr05 as abap.int4(10)) as objnr05,
  17. key cast(objnr06 as abap.int4(10)) as objnr06,
  18. key cast(objnr07 as abap.int4(10)) as objnr07,
  19. key cast(objnr08 as abap.int4(10)) as objnr08,
  20. key drcrk,
  21. key rpmax,
  22. activ,
  23. ………………
  24. ………………
  25. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hslvt) as hslvt,
  26. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl01) as hsl01,
  27. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl02) as hsl02,
  28. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl03) as hsl03,
  29. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl04) as hsl04,
  30. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl05) as hsl05,
  31. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl06) as hsl06,
  32. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl07) as hsl07,
  33. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl08) as hsl08,
  34. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl09) as hsl09,
  35. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl10) as hsl10,
  36. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl11) as hsl11,
  37. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl12) as hsl12,
  38. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl13) as hsl13,
  39. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl14) as hsl14,
  40. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl15) as hsl15,
  41. @Semantics.amount.currencyCode: 'T882G.CURR1' sum(hsl16) as hsl16,
  42. ………………
  43. ………………
  44. max(timestamp) as timestamp
  45. }
  46. group by
  47. ………………
  48. ………………

可以看到,FGL_FAGLFLEXT中的HSLVT和HSL01, HSL02字段,是对FGL_GLTT2中相应字段的汇总得来的。对应语句:sum(hslvt) as hslvt。

打开FGL_GLTT2,会发现该视图中的金额汇总自FGL_GLTT1,所以这里就不贴FGL_GLTT2的定义了,直接看FGL_GLTT1:

  1. @AbapCatalog.sqlViewName: 'FGLV_GLTT1'
  2. @AccessControl.authorizationCheck: #NOT_REQUIRED
  3. @ObjectModel.usageType.serviceQuality: #X
  4. @ObjectModel.usageType.sizeCategory: #XL
  5. @ObjectModel.usageType.dataClass: #MIXED
  6. @EndUserText.label: 'G/L totals: create the period block'
  7. define view FGL_GLTT1 as select from FGL_GLTT0
  8. {
  9. rclnt,
  10. ryear,
  11. 0 as objnr00,
  12. 0 as objnr01,
  13. 0 as objnr02,
  14. 0 as objnr03,
  15. 0 as objnr04,
  16. 0 as objnr05,
  17. 0 as objnr06,
  18. 0 as objnr07,
  19. 0 as objnr08,
  20. drcrk,
  21.  
  22. case poper
  23. when '' then ''
  24. else cast( lpad( cast ( 16 * (1 + div( cast(poper as abap.int4) - 1, 16) ) as abap.char(12) ), 3, '') as abap.numc(3))
  25. end as rpmax,
  26. activ, rmvct, rtcur,
  27. runit, awtyp, rldnr, rrcty, rvers, logsys, racct, cost_elem, rbukrs,
  28. rcntr, prctr, rfarea, rbusa, kokrs, segment,
  29. scntr, pprctr, sfarea, sbusa, rassc, psegment,
  30. //<$VF>
  31. fikrs, rfund, rgrant_nbr, rbudget_pd, sfund, sgrant_nbr, sbudget_pd,
  32. re_bukrs, re_account, vname, egrup, recid,
  33. //<$FIELDS>
  34. //<$VF>
  35. ………………
  36. ………………
  37. case poper when '' then hsl else 0 end as hslvt,
  38. case mod( cast(poper as abap.int4 ), 16) when 1 then hsl else 0 end as hsl01,
  39. case mod( cast(poper as abap.int4 ), 16) when 2 then hsl else 0 end as hsl02,
  40. case mod( cast(poper as abap.int4 ), 16) when 3 then hsl else 0 end as hsl03,
  41. case mod( cast(poper as abap.int4 ), 16) when 4 then hsl else 0 end as hsl04,
  42. case mod( cast(poper as abap.int4 ), 16) when 5 then hsl else 0 end as hsl05,
  43. case mod( cast(poper as abap.int4 ), 16) when 6 then hsl else 0 end as hsl06,
  44. case mod( cast(poper as abap.int4 ), 16) when 7 then hsl else 0 end as hsl07,
  45. case mod( cast(poper as abap.int4 ), 16) when 8 then hsl else 0 end as hsl08,
  46. case mod( cast(poper as abap.int4 ), 16) when 9 then hsl else 0 end as hsl09,
  47. case mod( cast(poper as abap.int4 ), 16) when 10 then hsl else 0 end as hsl10,
  48. case mod( cast(poper as abap.int4 ), 16) when 11 then hsl else 0 end as hsl11,
  49. case mod( cast(poper as abap.int4 ), 16) when 12 then hsl else 0 end as hsl12,
  50. case mod( cast(poper as abap.int4 ), 16) when 13 then hsl else 0 end as hsl13,
  51. case mod( cast(poper as abap.int4 ), 16) when 14 then hsl else 0 end as hsl14,
  52. case mod( cast(poper as abap.int4 ), 16) when 15 then hsl else 0 end as hsl15,
  53. case mod( cast(poper as abap.int4 ), 16)
  54. when 0 then
  55. case poper
  56. when '' then 0
  57. else hsl
  58. end
  59. else 0 end
  60. as hsl16,
  61. ………………
  62. ………………
  63.  
  64. timestamp
  65. }

可以清楚地看到,原来结转余额HSLVT其实就是期间POPER = 000时的金额,HSL01,HSL02就是期间POPER = 001,002时的金额....

对应语句是:case poper when '000' then hsl else 0 end as hslvt,,和case mod( cast(poper as abap.int4 ), 16) when 1 then hsl else 0 end as hsl01

继续找下去可以得知FGL_GLTT1的数据来自于表ACDOCA(Universal Journal Entry Line Items)。也就是说,每次从FAGLFLEXT中查询数据,实际上相当于经过了FGL_GLSI_ACD->FGL_GLSI_ACD->FGL_GLTT1->FGL_GLTT2->FGL_FAGLFLEXT->V_FAGLFLEXT_DDL一系列中间层逻辑处理,其实际的数据源则是表ACDOCA。当然这些视图中可能还包含其它细节..

以上是对FAGLFLEXT的分析,ACDOCT也是差不多的,具体的条件有点差别。

FAGLFLEXT和ACDOCT的存在体现了CDS所具备的强大能力。不过,毕竟它们只是兼容视图,又包含这样多的中间层...按照一般的原则,程序中的中间层越多,性能就越差。因此,在了解到它们中的数据的实际来源后,也许在某些情况下,直接从ACDOCA中通过聚合函数获取期初余额之类的东西会有更好的性能。

按这样的思路改写文初获取1000公司在2018年3月的期初余额的代码,可以写成:

  1. SELECT SUM( hsl ) FROM acdoca WHERE rbukrs = ''
  2. AND gjahr = ''
  3. AND poper < ''
  4. INTO @DATA(l_balance).

是不是简单了很多呢?

最后,再次重申,本文只是从技术角度介绍下我对ACDOCT,FAGLFLEXT的了解。在实际业务中,这两个视图中的数据可能和分类账、凭证状态之类的东西有关...其中的数据与ACDOCA中的汇总数据并不一定在任何情况下都完全相等。

示例代码:

从ACDOCA中获取公司代码1000,分类账0L,科目1122020000的期初余额、本期发生额、期末余额、本年累计发生额:

  1. REPORT ztest_balance.
  2.  
  3. DATA: p_gjahr TYPE acdoca-gjahr VALUE '',
  4. p_poper TYPE acdoca-poper VALUE ''.
  5.  
  6. DATA: c_racct TYPE racct VALUE ''.
  7.  
  8. WITH +itab AS (
  9. SELECT
  10. CASE WHEN poper < @p_poper AND gjahr = @p_gjahr THEN hsl
  11. ELSE
  12. END AS opening_balance,
  13. CASE WHEN poper = @p_poper AND gjahr = @p_gjahr THEN hsl
  14. ELSE
  15. END AS current_balance,
  16. CASE WHEN poper <= @p_poper AND gjahr = @p_gjahr THEN hsl
  17. ELSE
  18. END AS ending_balance,
  19. CASE WHEN poper > '' AND poper <= '' AND gjahr = @p_gjahr THEN hsl
  20. ELSE
  21. END AS current_year_balance,
  22. racct
  23. FROM acdoca
  24. WHERE racct = @c_racct
        AND gjahr = @p_gjahr
  25. AND rbukrs = ''
  26. AND rldnr = '0L' )
  27. SELECT
  28. racct,
  29. SUM( opening_balance ) AS opening_balance,
  30. SUM( current_balance ) AS current_balance,
  31. SUM( ending_balance ) AS ending_balance,
  32. SUM( current_year_balance ) AS current_year_balance
  33. FROM +itab
  34. GROUP BY racct
  35. INTO TABLE @DATA(lt_balance).

S/4 HANA中的ACDOCT和FAGLFLEXT的更多相关文章

  1. S/4 HANA中的MATDOC和MATDOC_EXTRACT

    最近做了销售和物料管理方面的一些需求,因此对S/4中的MM的数据模型有了一定的了解.目前网络已经有一些介绍物料凭证表MATDOC的文章,内容好像不是很详细,另外也没发现介绍库存变更数据表MATDOC_ ...

  2. SAP HANA 中的决策表(Decision Table)

    http://scn.sap.com/community/developer-center/hana/blog/2013/01/11/what-can-you-do-with-decision-tab ...

  3. SAP HANA中创建计算视图(Calculation View)

    [Step By Step]SAP HANA中创建计算视图(Calculation View) Demo Instruction: 该视图将两个表AUDIOBOOKS和BOOKS中的数据进行连接,并作 ...

  4. SAP HANA中的SLT简介

    在以SAP系统作为主要ERP的企业中,不同系统之间的数据库数据同步是个重要的工作.对于这种需求,除了开发ABAP接口之外,也有高效的工具可用.SLT就是其中之一. SLT是SAP的第一个ETL(Ext ...

  5. S/4 HANA中发票输出切换回NAST

    在S/4 HANA中,新的输出管理Output Management叫做SAP S/4HANA output control(输出控制),是基于BRF+的,而不是原来基于NAST的.关于S4新的输出控 ...

  6. 【HANA系列】SAP HANA中null变成问号的问题

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA中null变成问 ...

  7. 【HANA系列】SAP UI5上传图片 用XSJS存储在HANA中的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP UI5上传图片 用XSJ ...

  8. S/4 HANA中的数据库锁策略

    S4中的新的MM数据模型以及HANA的Insert-only特性允许物料凭证的并行处理,提高了相关的吞吐量.由此,数据库锁的应用情况也发生了变化.下文将介绍这些变化(基于S4 1610). 本文链接: ...

  9. SAP HANA中创建层次分析视图(Hierarchy Analytic View)

    1. 创建层次Attribute View: ATTR_PRODUCT_HIERACHY ref:  http://www.cnblogs.com/omygod/archive/2013/04/30/ ...

随机推荐

  1. Visual Studio Code搭建python开发环境

    开发Python的环境有很多,原来已经在vs2013上面搭建好python的开发环境了,但是vs2013每次启动都占太多内存(太强大了吧),这下出了vs code,既轻量又酷炫,正好拿来试一试开发py ...

  2. R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

    要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 终于开始攻克并行这一块了,有点小兴 ...

  3. 安装sphinx和coreseek

    sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数 ...

  4. document.forms[].submit()

    document.forms['exportServlet'].submit(); (1)document.forms:表示获取当前页面的所有表单 (2)document.forms[0]:表示获取当 ...

  5. VxWorks下USB驱动总结1

    1.USB设备 物理特征:4条电缆,电源线.地线.数据线.脉冲线; 速 度:低速1.5Mbps,全速12Mbps,高速480Mbps; 规范版本:1998年USB1.1,2000年USB2.0; 连 ...

  6. 初试 Windows XP Embedded 系统开发1

    目前 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是可以脱离主机里的硬盘独立运行的 Windows 操作系统,Window ...

  7. CF374 Maxim and Array

    贪心 如果有0先变成非0 如果负数的个数 应该变为偶数 之后就是每次将绝对值最小的值加K #include<bits/stdc++.h> using namespace std; cons ...

  8. 微信小程序hidden

    首先hidden默认在display:block;情况下是会默认生效的: but在很多时候只在初始值下有效, 在data下声明 flag:true; 方法中: 无效,所以尽量不要使用hidden这个属 ...

  9. MySQL入门笔记(二)

    MySQL的数据类型.数据库操作.针对单表的操作以及简单的记录操作可参考:MySQL入门笔记(一) 五.子查询   子查询可简单地理解为查询中的查询,即子查询外部必然还有一层查询,并且这里的查询并非仅 ...

  10. 【BZOJ2190】仪仗队(数论)

    [BZOJ2190]仪仗队(数论) 题面 粘链接,题目中有图片 题解 对于题意,可以考虑 如果有\((i,j)\)能够被看见 那么,\((ki,kj)\)就一定不能看见 所以,如果一个点能够被看见,则 ...