5. ETL – Master Control Flow Master control flow populating a small staging database (example using SSIS) It consists of an ETL container calling a set of related external packages utilizing the Execute Package functionality in SSIS, and a series of administrative tasks: backup, database shrink, and index rebuild Each administrative task has a failure e-mail notification along with a final Success task for the entire package
6. ETL – Package Container Zoom into the package container The process for populating the staging database demonstrates the dependencies between the different dimensional hierarchies. For example, the timesheet load requires both the employee and project loads as prerequisites before it can execute.
7. ETL – Employee Data Flow Sample Data Flow: Employees In the event of truncation, the process writes these cases to a warning file before reintegrating them into the main flow. The employee data sources from a CSV flatfile and checks for a truncation issue on a new derived column, the full name (consisting of first name appended to last name).
8. ETL – Employee Data Flow Employee Data Flow (continued) Following the truncation check, the data flow looks up the existing employee table to determine if a given input will be an insert or an update (or an error).
9. ETL – Timesheets Control Flow This one uses a loop container to read multiple timesheet inputs from the same directory before sending off either a success or failure e-mail notification. Another control flow in the same package
10. ETL – Slowly Changing Dimensions CDC for Slowly Changing Dimension This example, implementing Change Data Capture, utilizes a Slowly Changing Dimension transform to sort out inserts and updates. Note, the source table for this data flow is the CDC table Another example from a different package for Change Data Capture
11.
12. ETL – Oracle PL/SQL Clickstream Data Warehouse Source is a Web traffic transactional system. Databases are not linked, so ETL is a combination of Oracle Import/Export (into a staging database) and PL/SQL Packages and Stored Procedures. This procedure calculates several daily clickstream statistics. procedure p_clicks_daily_sum ( p_day_ID in number ) is [...] cursor c_pages_per_hour is select min(count( click_ID )) min_cnt_clicks , max(count( click_ID )) max_cnt_clicks , min(count(distinct URL )) min_cnt_unique_page , max(count(distinct URL )) max_cnt_unique_page , sum(count(distinct URL )) / cn_hours_per_day mean_uq_page_viewed_cnt from com_daily_ssn_details cdsd where com_ID = v_com_ID and click_day_ID = p_day_ID group by click_hour ; Cursor illustrates several calculations for the daily clickstream statistics
13. ETL – Oracle PL/SQL Daily Clicks Summary Process employs a cursor loop to load the daily clickstream facts by community ID (the top-level dimension) and time begin v_cal_date := mat_stage . get_calendar_date ( p_day_ID ); for r_com in c_communities loop [...] begin insert into clicks_daily_sum values ( p_day_ID , r_com . com_ID , f_get_partition_key ( v_cal_date ) , v_min_cnt_clicks , v_max_cnt_clicks , v_min_cnt_unique_page , v_max_cnt_unique_page , v_mean_uq_page_viewed_cnt , [more columns...] , sysdate ); exception when others then DWH . DWH_process . write_errors ( parameters ); end; end loop; end p_clicks_daily_sum ; (continued)
14.
15. Analysis Services The staging database that serves as the data source for the OLAP cube, a result of the preceding SSIS example. The model has five dimensional hierarchies and four fact tables.
16. Analysis Services OLAP Cube Design This screenshot illustrates the relationships between the five dimensional hierarchies and four fact tables
17. Analysis Services Calculations and KPIs The calculated member and KPI design tabs Both images highlight the detail behind the KPI for Overhead as a Percentage of Total Cost
18. Analysis Services – KPI The end result, using Excel as the reporting client, demonstrating Overhead as a Percentage of Total Cost by Jobs
19.
20. Report Design Overhead Category Report (example using SSRS) The two extra datasets calculate the previous quarter and set the default to the most recent quarter. Note, as this is overhead, negative values for percentage change are good (black) and positive values are bad ( red ).
21. Simple Tabular Report Overhead Category Report (continued) Basic report showing current and previous quarter’s overhead and the percentage change, accepting the current quarter as an input parameter. Also shows the use of a SharePoint site collection as the distribution medium.
22. Dashboard Design PerformancePoint Server Dashboard Designer Scorecard with two KPIs, including the same Overhead Percentage as earlier Dashboard design, showing a single filter that links to the scorecard on the left. The Financials scorecard is in the right zone and does not use the filter.
24. Analytic Dashboard Employee Labor Analysis Second example showing both an analytic chart and grid on the same dashboard page. Note, the dual Y-axes that the chart utilizes.
25. SharePoint Web Part Job Profitability Another dual axis example, this one using Excel Services to display the chart in SharePoint and an Analysis Services Web Part filter
26.
27. Oracle Application Server Web Content Management Mock-up of primary page lists all items for each content area of the website procedure magazine_list ( [parameter list] ) is begin -- Piece the dynamic query together. v_query := v_select || v_where || v_ord_grp ; open c_pages for v_query ; fetch c_pages into v_resultset(v_resultset. count +1) ; while not c_pages % NOTFOUND loop fetch c_pages into v_resultset(v_resultset. count +1) ; end loop; v_row_count := DBMS_SQL . last_row_count ; close c_pages ;
28. Oracle Application Server -- Build the html frame. (does not include the navigation frame) htp.p ( ' <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type“ content="text/html"> <script language="JavaScript"> [...] ‘ ); for i in v_first_result .. least ( v_last_result , v_resultset. count ) loop htp.p ( ‘<tr> <td>' || v_title || '</td> <td class=“list_item">' || v_resultset ( i ). ID || '</td> <td class=“list_item">' || to_char ( v_resultset ( i ). start_date, 'fmmm/dd/yyyy' ) || '</td> <td class=“list_item">' || to_char ( v_resultset ( i ). end_date, 'fmmm/dd/yyyy' ) || '</td> <td class=“list_item">' || v_edit_pvw_del || '</td> </tr>‘ ); end loop; end magazine_list ; Web Content Management (continued)
29. Oracle Application Server procedure nav_load_and_save_content_mag ( p_graphics_path in varchar2 := cn_graphics_path ) is begin htp.p (' function load_content() { isSelected(''content''); final_form = document.final_page; contentform = top.contentFrame.document.content; for (i=0; i < author_list.length; i++) { contentform.author.options[contentform.author.options.length] = author_list[i]; } preload_select(contentform.author, final_form.P_PGE_CMEM_ID.value); contentform.leadin.value = final_form.P_PGE_LEAD_IN.value; contentform.body.value = final_form.P_PGE_BODY.value; } Web Content Management – Edit Content The actual content management utility employs Javascript to load content text and related data into static HTML subpages
30. Oracle Application Server function save_content(direction) { final_form = document.final_page; contentform = top.contentFrame.document.content; if (get_selected(contentform.author)!="") document.content_change.src=''‘ || p_graphics_path || 'stus_yes.gif''; else document.content_change.src=''‘ || p_graphics_path || 'stus_no.gif''; final_form.P_PGE_CMEM_ID.value = get_selected(contentform.author); final_form.P_PGE_LEAD_IN.value = contentform.leadin.value; rawText = contentform.body.value; encodedText = ""; if (contentform.leadin.value.length >1990) { alert("The lead-in text area cannot handle more than 2000 characters.Please reduce its size."); return false; } final_form.P_PGE_BODY.value = encodedText; save_redirect(direction); }' ); end; Web Content Management – Edit Content (continued)
31. Perl sub a1 { print "<table border='1' bordercolor='#FFFFFF' cellspacing='0' cellpadding='2'>"; [header items] print "</table>"; […] my $sth3 = $dbh->prepare(' SELECT date_id, SUM( registrations ), SUM( ath ), SUM( listeners ), SUM( sessions ), SUM( ads_served ), SUM( ads_missed ) FROM a1 WHERE MONTH(date_ID)= ? AND YEAR(date_ID)= ? GROUP by date_ID ORDER by date_ID DESC') or die "Couldn't prepare statement: " . $dbh->errstr; Perl CGI Report Delivery for Web Streaming Advertising Note, the $dbh handle indicating the use of the DBI module to handle database agnostic SQL functionality