{"id":170,"date":"2010-04-02T13:51:00","date_gmt":"2010-04-02T13:51:00","guid":{"rendered":"http:\/\/turtlellc.com\/index.php\/loading-bpc-data-the-old-fashioned-way-using-sql\/"},"modified":"2010-04-02T13:51:00","modified_gmt":"2010-04-02T13:51:00","slug":"loading-bpc-data-the-old-fashioned-way-using-sql","status":"publish","type":"post","link":"https:\/\/www.turtle.works\/knowledge\/loading-bpc-data-the-old-fashioned-way-using-sql\/","title":{"rendered":"Loading BPC Data the Old Fashioned Way; Using SQL"},"content":{"rendered":"<p><span style=\"font-family:trebuchet ms;\">Thanks to Gert Andries van den Berg   on the SAP BPC forums for making sense of all this. In a nutshell, by writing records to either the WB or FAC2 table, the cube is updated. No need to build SSIS package with Dumpload task. This can be done with SQL. Writing to the FAC2 table seems to be the destination of choice. Though I&#8217;ve yet to determine if running optimization is required to see data in reports.<\/span><\/p>\n<p>From Gert Andries van den Berg.<br \/><span style=\"font-family:trebuchet ms;\"><\/span><\/p>\n<blockquote><p><span style=\"font-family:trebuchet ms;\">As per the tuning doc:<\/span><\/p>\n<p><span style=\"font-family:trebuchet ms;\">WB \u2013 real time data input (ROLAP partition)<\/span><br \/><span style=\"font-family:trebuchet ms;\">This is data that is the most current data sent to the system. Data sent by BPC for Excel data sends and Investigator browser data sends is placed in real-time storage.<\/span><br \/><span style=\"font-family:trebuchet ms;\">FAC2 \u2013 short term and Data Manager imports (MOLAP partition)<\/span><br \/><span style=\"font-family:trebuchet ms;\">This is data that is not real-time data, but is also not in long-term storage yet. When you load data via Data Manager (automatic data load from external data sources), it loads the data to short-term storage so that the loaded data does not affect system performance. Only the cube partition associated with this table is processed, so the system is not taken offline.<\/span><br \/><span style=\"font-family:trebuchet ms;\">Fact \u2013 long term history (MOLAP partition)<\/span><br \/><span style=\"font-family:trebuchet ms;\">This is the main data storage. All data eventually resides in long-term storage. Data that is not accessed very often remains in long-term storage so that the system maintains performance<\/span><br \/><span style=\"font-family:trebuchet ms;\">This structure allows SAP BPC to maintain the same performance over time even when there is a large increase in data volumes.<\/span><br \/><span style=\"font-family:trebuchet ms;\">Periodically clearing real-time data greatly optimizes the performance of the system and an \u201cOptimization\u201d process is required (this could be scheduled automatically based on given parameters like a numbers of records threshold).<\/span><\/p>\n<p><span style=\"font-family:trebuchet ms;\">Lite Optimization:<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">Clears Real-time data storage (WRITEBACK) and moves it to short-term data storage (FAC2). This option doesn\u2019t take the system offline, and can be scheduled during normal business activity.<\/span><\/p>\n<p><span style=\"font-family:trebuchet ms;\">Incremental Optimization:<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">Clears both real-time and Short-term data storage (WB and FAC2) and moves both to Long-term data storage (FACT).<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">This option should be run when the system is offline, but it will not take the system offline so it should be run during off-peak periods of activity.<\/span><\/p>\n<p><span style=\"font-family:trebuchet ms;\">Full Process Optimization:<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">Clears both real-time and short-term data storage and processes the dimensions.<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">This option takes the system offline and takes longer to run than the incremental optimization.<\/span><br \/><span style=\"font-family:trebuchet ms;\">\u2014<\/span><br \/><span style=\"font-family:trebuchet ms;\">It is best run scheduled at down-time periods \u2013 for example after a month-end close.<\/span><br \/><span style=\"font-family:trebuchet ms;\">The Compress Database option is available to rationalize the Fact Tables. \u201cCompress\u201d sums multiple entries for the same CurrentView into one entry so that data storage space is minimized. Compressed databases also process more quickly.<\/p>\n<blockquote><\/blockquote>\n<blockquote><\/blockquote>\n<p><\/span><\/p><\/blockquote>\n<p>More info on this topic from Sorin Radulescu:<\/p>\n<blockquote><p>First you have to be aware about structure of BPC cubes:<br \/>Each cube has  3 partitions:<br \/>1. fact &#8211; MOLAP<br \/>2. fac2 &#8211; MOLAP<br \/>3. WB &#8211; ROLAP<\/p>\n<p>When  you insert records into WB table because WB is ROLAP partitions you will see the  impact of that insert into cube in Real Time.<br \/>If you insert records into any  of MOLAP partitions without processin the partition you are not able to see  these records into cube.<br \/>I think now you have a clear picture about BPC cube  and you undertsood diference between MOLAP and ROLAP partitions.<\/p>\n<p>Lite  Optimize is necessary just to keep under contrl the number of records from WB  table.<br \/>For SSAS if a Rolap Partitions has more than 100 000 records retrieve  data from that cube it will be very slow if in the same time users are doing  insert into WB Table.<br \/>So Lite optimize is schedule usually every 15 minutes  when number of records is over 20 000.<br \/>That&#8217;s means every 15 minutes this  dtsx package check if WB has 20 000 records.<br \/>If yes then is running this  process<br \/>If not then is not doing anything.<\/p>\n<p>LITE Optimize  process<br \/>It is doing the follow steps:<br \/>1. Copy records from wb to fac2 and  marlk the records from wb move into fac2<br \/>2. Create a temporary partitions and  start to process this partition just for these records move from wb table<br \/>3.  When it is finishing the process of partition then the system is doing in  transaction the follow:<br \/>&#8211; merge partition fac2 with temp partition<br \/>&#8211;  delete the records marked from wb<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Thanks to Gert Andries van den Berg on the SAP BPC forums for making sense of all this. In a nutshell, by writing records to either the WB or FAC2 table, the cube is updated. No need to build SSIS package with Dumpload task. This can be done with SQL. Writing to the FAC2 table &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.turtle.works\/knowledge\/loading-bpc-data-the-old-fashioned-way-using-sql\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Loading BPC Data the Old Fashioned Way; Using SQL&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,16,26],"tags":[],"class_list":["post-170","post","type-post","status-publish","format-standard","hentry","category-bpc","category-outlooksoft","category-sql-server"],"_links":{"self":[{"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":0,"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.turtle.works\/knowledge\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}