{"id":1079,"date":"2015-08-04T13:19:17","date_gmt":"2015-08-04T12:19:17","guid":{"rendered":"http:\/\/dotnetsql.info\/net-sql\/?p=1079"},"modified":"2015-08-04T10:04:40","modified_gmt":"2015-08-04T09:04:40","slug":"what-an-ods-is-how-do-i-use-it","status":"publish","type":"post","link":"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/","title":{"rendered":"What an ODS is and how should you use it"},"content":{"rendered":"<p>When working on the <a href=\"https:\/\/www.linkedin.com\/pulse\/how-implement-credit-risk-data-warehouse-part-1-lucian-leonte?trk=prof-post\" target=\"_blank\">design and implementation of a data-warehouse \/ business intelligence solution<\/a> some\u00a0of the most common questions that I receive are\u00a0in relation to the ODS or Operational Data Store. In today&#8217;s post I&#8217;ll explain it&#8217;s purpose and the proper way to interact with it.<\/p>\n<p><strong>The definition of the Operational Data Store<\/strong><img class=\"wp-more-tag mce-wp-more\" alt=\"\" data-li-src=\"\" data-loading-tracked=\"true\" \/><!--more--><\/p>\n<p>An operational data store (or &#8220;ODS&#8221;) is a database designed to integrate data from multiple sources for additional operations on the data.<\/p>\n<p>Unlike a master data store the data is not passed back to operational systems but it may be passed for further operations and to the <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a> for reporting.<\/p>\n<p><strong>What the Operational Data Store &#8211; ODS \u00a0&#8211; isn&#8217;t<\/strong><\/p>\n<p>The ODS <strong>isn&#8217;t<\/strong> a data storage step before the <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a>. The ODS <strong>must not<\/strong> be used as a convenient staging ground for raw data not yet ready for <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a>consumption. The ODS <strong>isn&#8217;t<\/strong> inherently unqueryable.<\/p>\n<p><strong>What the Operational Data Store &#8211; ODS \u00a0&#8211; is<\/strong><\/p>\n<p>The ODS <strong>must be<\/strong> the bedrock of the <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a> itself. When data is extracted from the primary legacy systems, you must store it for safekeeping and for querying before you perform any summarization. It is this non-summarized, queryable, and long-lasting form of the legacy data that is the ODS.<\/p>\n<p><strong>Implications of the above<\/strong><\/p>\n<p>When the data is non-summarized, it is a direct image of the original legacy base-level records. The charm of capturing this base-level data is that you can only roll the data upward; it is not possible to descend to a lower level. The <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a> is \u201coff the hook\u201d if it makes the most granular data available.<\/p>\n<p>Base-level records from legacy systems take on many different forms. Base-level data generally consists of transactions (operations performed against a \u201ccustomer\u201d) or a snapshot of the \u201ccustomer\u201d taken at the end of the reporting interval (usually daily).<\/p>\n<p>In both cases, the base-level record looks remarkably similar. The record consists of key entries and textual and numerical measured values. These base-level records are almost always just one step away from being both dimensional and queryable.<\/p>\n<p>That one step consists simply of cleaning up the key values so that they point to clean dimensions. If a key value refers to a central, common business dimension such as customer, \u00a0product, or geography, you should use a clean, corporate-wide key value for the customer, product, or geography key in the base data that points to the respective dimension table recognizable by the other data sources in the <a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a>.<\/p>\n<p>When base-level legacy records are subjected to this initial cleaning of the primary dimension keys, two wondrous things happen.<\/p>\n<ul>\n<li>First, the base-level records start to become queryable because they can be tied via a simple star join to the primary dimensions of the surrounding business.<\/li>\n<li>Second, these records will be much easier to deal with in the future because some of the data processing needed to tie these records to other data in the<a href=\"https:\/\/www.linkedin.com\/pulse\/first-assumption-could-crash-your-credit-risk-dw-project-leonte?trk=prof-post\" target=\"_blank\">data warehouse<\/a> has already been done. In particular, it will not be necessary in the future to remember the funny, idiosyncratic customer, product, and geography codes in these particular records.<\/li>\n<\/ul>\n<p>If this lightly cleaned base-level data is housed in an actual relational database, rather than being held in an intermediate \u201csuspense file,\u201d then it really is queryable.<\/p>\n<p>With an aggregate navigator, this data can be accessed automatically whenever users ask precise questions that no higher level aggregate can satisfy.<\/p>\n<p>Although this is highly beneficial on <a href=\"https:\/\/www.linkedin.com\/pulse\/how-implement-credit-risk-data-warehouse-part-1-lucian-leonte?trk=prof-post\" target=\"_blank\">Credit Risk \/ Financial Domain Reporting<\/a>implementations due to the facility it provides to drill down into the finer details and retrieve the actual numbers that stood behind the summary it should the standard approach for <a href=\"https:\/\/www.linkedin.com\/pulse\/how-implement-credit-risk-data-warehouse-part-1-lucian-leonte?trk=prof-post\" target=\"_blank\">Data Warehouse and Business Intelligence Reporting implementations<\/a>.<\/p>\n<p><strong><em>Until next time,<\/em><\/strong><\/p>\n<p><strong><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Keep learning,<\/em><\/strong><strong><em>\u00a0Keep\u00a0<\/em><\/strong><strong><em>searching\u00a0and Keep succeeding!<\/em><\/strong><\/p>\n<p><strong>Let\u2019s connect on :<\/strong>\u00a0<a href=\"http:\/\/www.linkedin.com\/in\/leonte\" target=\"_blank\">LinkedIn<\/a><\/p>\n<p><strong>Follow me on Twitter :<\/strong>\u00a0<a href=\"http:\/\/www.twitter.com\/lgleonte\" target=\"_blank\" rel=\"nofollow\">@lgleonte<\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow\" data-shared=\"sharing-twitter-1079\" class=\"share-twitter sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Twitter (Opens in new window)<\/span><\/a><\/li><li class=\"share-linkedin\"><a rel=\"nofollow\" data-shared=\"sharing-linkedin-1079\" class=\"share-linkedin sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on LinkedIn (Opens in new window)<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow\" data-shared=\"sharing-facebook-1079\" class=\"share-facebook sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=facebook\" target=\"_blank\" title=\"Share on Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Share on Facebook (Opens in new window)<\/span><\/a><\/li><li class=\"share-google-plus-1\"><a rel=\"nofollow\" data-shared=\"sharing-google-1079\" class=\"share-google-plus-1 sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=google-plus-1\" target=\"_blank\" title=\"Click to share on Google+\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Google+ (Opens in new window)<\/span><\/a><\/li><li class=\"share-pocket\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-pocket sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=pocket\" target=\"_blank\" title=\"Click to share on Pocket\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Pocket (Opens in new window)<\/span><\/a><\/li><li class=\"share-email\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-email sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=email\" target=\"_blank\" title=\"Click to email this to a friend\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to email this to a friend (Opens in new window)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-76243027-1079-69dff02a9df4f' data-src='\/\/widgets.wp.com\/likes\/#blog_id=76243027&amp;post_id=1079&amp;origin=dotnetsql.info&amp;obj_id=76243027-1079-69dff02a9df4f' data-name='like-post-frame-76243027-1079-69dff02a9df4f'><h3 class='sd-title'>Like this:<\/h3><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height:55px'><span class='button'><span>Like<\/span><\/span> <span class=\"loading\">Loading...<\/span><\/div><span class='sd-text-color'><\/span><a class='sd-link-color'><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>When working on the design and implementation of a data-warehouse \/ business intelligence solution some\u00a0of the most common questions that I receive are\u00a0in relation to the ODS or Operational Data Store. In today&#8217;s post I&#8217;ll explain it&#8217;s purpose and the proper way to interact with it. The definition of the Operational Data Store<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow\" data-shared=\"sharing-twitter-1079\" class=\"share-twitter sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Twitter (Opens in new window)<\/span><\/a><\/li><li class=\"share-linkedin\"><a rel=\"nofollow\" data-shared=\"sharing-linkedin-1079\" class=\"share-linkedin sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on LinkedIn (Opens in new window)<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow\" data-shared=\"sharing-facebook-1079\" class=\"share-facebook sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=facebook\" target=\"_blank\" title=\"Share on Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Share on Facebook (Opens in new window)<\/span><\/a><\/li><li class=\"share-google-plus-1\"><a rel=\"nofollow\" data-shared=\"sharing-google-1079\" class=\"share-google-plus-1 sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=google-plus-1\" target=\"_blank\" title=\"Click to share on Google+\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Google+ (Opens in new window)<\/span><\/a><\/li><li class=\"share-pocket\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-pocket sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=pocket\" target=\"_blank\" title=\"Click to share on Pocket\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Pocket (Opens in new window)<\/span><\/a><\/li><li class=\"share-email\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-email sd-button share-icon no-text\" href=\"http:\/\/dotnetsql.info\/net-sql\/index.php\/what-an-ods-is-how-do-i-use-it\/?share=email\" target=\"_blank\" title=\"Click to email this to a friend\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to email this to a friend (Opens in new window)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-76243027-1079-69dff02a9e41d' data-src='\/\/widgets.wp.com\/likes\/#blog_id=76243027&amp;post_id=1079&amp;origin=dotnetsql.info&amp;obj_id=76243027-1079-69dff02a9e41d' data-name='like-post-frame-76243027-1079-69dff02a9e41d'><h3 class='sd-title'>Like this:<\/h3><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height:55px'><span class='button'><span>Like<\/span><\/span> <span class=\"loading\">Loading...<\/span><\/div><span class='sd-text-color'><\/span><a class='sd-link-color'><\/a><\/div>","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/posts\/1079"}],"collection":[{"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/comments?post=1079"}],"version-history":[{"count":10,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/posts\/1079\/revisions"}],"predecessor-version":[{"id":1097,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/posts\/1079\/revisions\/1097"}],"wp:attachment":[{"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/media?parent=1079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/categories?post=1079"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dotnetsql.info\/net-sql\/index.php\/wp-json\/wp\/v2\/tags?post=1079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}