{"id":7804,"date":"2023-08-17T15:39:42","date_gmt":"2023-08-17T15:39:42","guid":{"rendered":"https:\/\/www.version1.com\/en-us\/?p=7804"},"modified":"2023-08-17T15:39:42","modified_gmt":"2023-08-17T15:39:42","slug":"aggregate-data-sources-obiee","status":"publish","type":"post","link":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","title":{"rendered":"Using Aggregates and Combining Data Sources in OBIEE"},"content":{"rendered":"<p><a href=\"http:\/\/www.kimballgroup.com\/\">Kimball<\/a> defines &#8220;aggregate fact tables as simple numeric rollups of atomic fact table data built solely to accelerate query performance. These aggregate fact tables should be available to the BI layer at the same time as the atomic fact tables so that BI tools smoothly choose the appropriate aggregate level at query time. This process, known as aggregate navigation, must be open so that every report writer, query tool, and BI application harvests the same performance benefits.<\/p>\n<p>A properly designed set of aggregates should behave like database indexes, which accelerate query performance but are not encountered directly by the BI applications or business users. Aggregate fact tables contain foreign keys to shrunken conformed dimensions, as well as aggregated facts created by summing measures from more atomic fact tables. Finally, aggregate OLAP cubes with summarized measures are frequently built in the same way as relational aggregates, but the OLAP cubes are meant to be accessed directly by the business users&#8221;, source <a href=\"https:\/\/www.kimballgroup.com\/data-warehouse-business-intelligence-resources\/kimball-techniques\/dimensional-modeling-techniques\/aggregate-fact-table-cube\/\">here<\/a>.<\/p>\n<p>When working with Oracle Business Intelligence (OBIEE) you often have to deal with aggregates. OBIEE supports using and managing aggregates with Oracle BI Administration Tool in a very efficient way. In this and the following posts we will take a bit deeper look:<\/p>\n<ol>\n<li>How to model aggregates manually,<\/li>\n<li>How to use Aggregate Persistent Wizard and<\/li>\n<li>How to include Essbase as an aggregated store.<\/li>\n<\/ol>\n<p>Let&#8217;s take a look at how to model aggregates manually. For our exercise, we will use Oracle Business Intelligence SampleApp VM (<a href=\"http:\/\/www.oracle.com\/technetwork\/middleware\/bi-foundation\/obiee-samples-167534.html\" >http:\/\/www.oracle.com\/technetwork\/middleware\/bi-foundation\/obiee-samples-167534.html<\/a>).<\/p>\n<p>We will start with the following base data schema:<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/dataschema1.png\" alt=\"OBIEE Blog Image 1\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>This data schema has already been imported into the BI repository (RPD), modeled in a physical model like this:<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/physicalmodel1.png\" alt=\"OBIEE Blog Image 2\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>and business model which looks like this:<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/businessmodel1.png\" alt=\"OBIEE Blog Image 3\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>If we create and run a simple query:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/query1.png\" alt=\"OBIEE Blog Image 4\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>this would be the result table:<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/report1.png\" alt=\"OBIEE Blog Image 5\" loading=\"lazy\"><\/p>\n<p>Execution log (nqquery) shows the following SQL was executed:<\/p>\n<p>WITH SAWITH0 AS (select sum(T4535.UNITS) as c1, \u00a0 \u00a0<br \/>\n\u00a0 sum(T4535.REVENUE) as c2, \u00a0 \u00a0<br \/>\n\u00a0 T4488.SEGMENT_DESC as c3, \u00a0 \u00a0<br \/>\n\u00a0 T4510.DEPARTMENT as c4, \u00a0 \u00a0<br \/>\n\u00a0 T4522.BRAND as c5, \u00a0\u00a0<br \/>\n\u00a0 T4563.PER_NAME_YEAR as c6, \u00a0 \u00a0<br \/>\n\u00a0 T4510.DEPT_KEY as c7, \u00a0 \u00a0<br \/>\n\u00a0 T4522.BRAND_KEY as c8, \u00a0 \u00a0<br \/>\n\u00a0 T4488.SEGMENT_KEY as c9<br \/>\nFrom <strong>SAMP_TIME_DAY_D T4563 \/* D_Time *\/ , \u00a0 \u00a0<\/strong><br \/>\n<strong>\u00a0 SAMP_PRODUCTS_D T4522 \/* D_Products *\/ , \u00a0 \u00a0<\/strong><br \/>\n<strong>\u00a0 SAMP_OFFICES_D T4510 \/* D_Offices *\/ , \u00a0\u00a0<\/strong><br \/>\n<strong>\u00a0 SAMP_CUST_SEGMENTS_D T4488 \/* D_Customer_segments *\/ , \u00a0 \u00a0<\/strong><br \/>\n<strong>\u00a0 SAMP_CUSTOMERS_D T4491 \/* D_Customers *\/ , \u00a0 \u00a0<\/strong><br \/>\n<strong>\u00a0 SAMP_REVENUE_F T4535 \/* F_Revenue *\/<\/strong><br \/>\nwhere \u00a0( T4488.SEGMENT_KEY = T4491.SEGMENT_KEY and T4491.CUST_KEY = T4535.CUST_KEY<br \/>\nand T4510.OFFICE_KEY = T4535.OFFICE_KEY<br \/>\nand T4522.PROD_KEY = T4535.PROD_KEY<br \/>\nand T4535.ORDER_DAY_DT = T4563.CALENDAR_DATE )<br \/>\ngroup by T4488.SEGMENT_DESC, T4488.SEGMENT_KEY, T4510.DEPARTMENT, T4510.DEPT_KEY, T4522.BRAND, T4522.BRAND_KEY, T4563.PER_NAME_YEAR)<br \/>\nselect \u2026<\/p>\n<p>\u00a0<\/p>\n<p>No surprise there, right? Data is read from &#8220;base&#8221; tables as expected. Ok. Let&#8217;s bring finally some aggregates in. For each table in our base data model, we need to create aggregated table at the required aggregation level. Let&#8217;s say that we want to aggregate our data at the following levels:<\/p>\n<ul>\n<li>Product dimension at Brand level<\/li>\n<li>Office dimension at Organisation level<\/li>\n<li>Customer dimension at Customer Segment level<\/li>\n<li>Time dimension at Month level<\/li>\n<li>Revenue fact table at dimension levels listed above.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/datamodel2.png\" alt=\"OBIEE Blog Image 6\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>Note that it&#8217;s necessary to aggregate dimensions too, not only tables.<\/p>\n<p>Here are the required SQL scripts to create aggregated tables above:<\/p>\n<p>&nbsp;<\/p>\n<p>create table samp_revenue_f_agg as\u00a0<br \/>\nselect p.brand_key, s.segment_key, o.org_key, t.per_name_month, sum(f.revenue) revenue, sum(f.units) units, sum(f.cost_fixed) cost_fixed, sum(f.cost_variable) cost_variable, count(f.ORDER_NUMBER) orders<br \/>\nfrom samp_revenue_f f, samp_products_d p, samp_customers_d c, samp_cust_segments_d s, samp_offices_d, samp_time_day_d t<br \/>\nwhere p.prod_key = f.prod_key<br \/>\nand s.segment_key = c.segment_key<br \/>\nand c.cust_key = f.cust_key<br \/>\nand o.office_key = f.office_key<br \/>\nand t.calendar_date = f.order_day_dt<br \/>\ngroup by p.brand_key, s.segment_key, o.org_key, t.per_name_month<br \/>\norder by p.brand_key, s.segment_key, o.org_key, t.per_name_month;<\/p>\n<p>create table samp_time_day_d_agg as<br \/>\nselect distinct d.per_name_month, d.per_name_qtr, d.per_name_half, d.per_name_year<br \/>\nfrom SAMP_TIME_DAY_D d<br \/>\ngroup by d.per_name_month, d.per_name_qtr, d.per_name_half, d.per_name_year<br \/>\norder by 4,3,2,1;<\/p>\n<p>create table samp_products_d_agg as<br \/>\nselect distinct p.brand, p.brand_key<br \/>\nfrom SAMP_PRODUCTS_D p<br \/>\ngroup by p.brand, p.brand_key<br \/>\norder by p.brand, p.brand_key;<\/p>\n<p>create table samp_customers_d_agg as<br \/>\nselect distinct s.segment_key, s.segment_desc<br \/>\nfrom samp_cust_segments_d s<br \/>\norder by s.SEGMENT_KEY,s.SEGMENT_DESC;<\/p>\n<p>create table samp_offices_d_agg as<br \/>\nselect distinct o.organization, o.org_key, o.company, o.company_key<br \/>\nfrom SAMP_OFFICES_D o<br \/>\ngroup by o.organization, o.org_key, o.company, o.company_key<br \/>\norder by o.organization, o.org_key, o.company, o.company_key;<\/p>\n<p>Once we have aggregated tables created, these can be imported into RPD. Similarly, as with base tables, once imported, aggregated tables have to be modeled on a physical level.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/physicalmodel2.png\" alt=\"OBIEE Blog Image 7\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>Now, we need to tell OBIEE that new aggregated tables should be used instead of base tables if that is more efficient to execute queries. The other requirement not mentioned so far, but equally important, is that end users are not affected by any changes made (with the exception that queries are run much faster).<\/p>\n<p>The business model should not change &#8230; much. Changes are made at Logical Table Sources where additional logical table sources and new aggregated tables are just added.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/businessmodel2.png\" alt=\"OBIEE Blog Image 8\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>You can simply drag and drop\u00a0physical columns onto existing logical columns. A new logical table source in this case will be automatically added and this logical column will have now mapped to two logical table sources. What we need to define is to define the logical level for each logical table source.<\/p>\n<p>Which logical table source to use is also defined at fact table when we define logical levels:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/logicallevels.png\" alt=\"OBIEE Blog Image 9\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>Let&#8217;s test it. Create the same query as before:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/query2.png\" alt=\"OBIEE Blog Image 10\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>and run it to get the following result, the same as initially:<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/result2.png\" alt=\"OBIEE Blog Image 11\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>Check logs again. Observe that SQL which has been generated and executed is now reading from aggregated tables:<\/p>\n<p>&nbsp;<\/p>\n<p>WITH SAWITH0 AS (<br \/>\nselect sum(T5346.UNITS) as c1,<br \/>\nsum(T5346.REVENUE) as c2,<br \/>\nT5337.SEGMENT_DESC as c3,<br \/>\nT5340.ORGANIZATION as c4,<br \/>\nT5343.BRAND as c5,<br \/>\nT5355.PER_NAME_YEAR as c6,<br \/>\nT5337.SEGMENT_KEY as c7,<br \/>\nT5340.ORG_KEY as c8,<br \/>\nT5343.BRAND_KEY as c9<br \/>\nfrom<br \/>\n<strong> SAMP_TIME_DAY_D_AGG T5355 \/* D_Time_AGG *\/ , \u00a0 \u00a0\u00a0<\/strong><br \/>\n<strong>SAMP_PRODUCTS_D_AGG T5343 \/* D_Products_AGG *\/ , \u00a0 \u00a0\u00a0<\/strong><br \/>\n<strong>SAMP_OFFICES_D_AGG T5340 \/* D_Offices_AGG *\/ , \u00a0 \u00a0\u00a0<\/strong><br \/>\n<strong>SAMP_CUSTOMERS_D_AGG T5337 \/* D_Customers_AGG *\/ , \u00a0 \u00a0\u00a0<\/strong><br \/>\n<strong>SAMP_REVENUE_F_AGG T5346 \/* F_Revenue_AGG *\/\u00a0<\/strong><br \/>\nwhere &#8230;<\/p>\n<p>&nbsp;<\/p>\n<p>If you want to drill down and click on one of the possible drill columns:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/06\/drill1.png\" alt=\"OBIEE Blog Image 12\" loading=\"lazy\"><\/p>\n<p>&nbsp;<\/p>\n<p>In this case, data is seamlessly read from base tables:<\/p>\n<div>\n<div>WITH SAWITH0 AS (<\/div>\n<div>select sum(T4535.UNITS) as c1, \u00a0 \u00a0\u00a0<\/div>\n<div>sum(T4535.REVENUE) as c2, \u00a0 \u00a0<\/div>\n<div>T4488.SEGMENT_DESC as c3, \u00a0 \u00a0\u00a0<\/div>\n<div>T4510.DEPARTMENT as c4, \u00a0 \u00a0<\/div>\n<div>T4510.ORGANIZATION as c5, \u00a0 \u00a0\u00a0<\/div>\n<div>T4522.BRAND as c6, \u00a0 \u00a0\u00a0<\/div>\n<div>T4563.PER_NAME_YEAR as c7, \u00a0 \u00a0\u00a0<\/div>\n<div>T4488.SEGMENT_KEY as c8, \u00a0 \u00a0\u00a0<\/div>\n<div>T4510.DEPT_KEY as c9, \u00a0 \u00a0\u00a0<\/div>\n<div>T4522.BRAND_KEY as c10\u00a0<\/div>\n<div>from \u00a0 \u00a0 \u00a0<\/div>\n<div><strong>SAMP_TIME_DAY_D T4563 \/* D_Time *\/ , \u00a0 \u00a0\u00a0<\/strong><\/div>\n<div><strong>SAMP_PRODUCTS_D T4522 \/* D_Products *\/ , \u00a0 \u00a0\u00a0<\/strong><\/div>\n<div><strong>SAMP_OFFICES_D T4510 \/* D_Offices *\/ , \u00a0 \u00a0\u00a0<\/strong><\/div>\n<div><strong>SAMP_CUST_SEGMENTS_D T4488 \/* D_Customer_segments *\/ , \u00a0 \u00a0\u00a0<\/strong><\/div>\n<div><strong>SAMP_CUSTOMERS_D T4491 \/* D_Customers *\/ , \u00a0 \u00a0\u00a0<\/strong><\/div>\n<div><strong>SAMP_REVENUE_F T4535 \/* F_Revenue *\/\u00a0<\/strong><\/div>\n<div>where \u00a0&#8230;<\/div>\n<\/div>\n<p>This concludes our first post on how to use aggregates in OBIEE. In the following post, we will take a look at how to use Aggregated Persistence Wizard and how to use Essbase as our aggregated data store.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kimball defines &#8220;aggregate fact tables as simple numeric rollups of atomic fact table data built solely to accelerate query performance. These aggregate fact tables should be available to the BI layer at the same time as the atomic fact tables so that BI tools smoothly choose the appropriate aggregate level at query time. This process, [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":7249,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[101],"tags":[123],"industry":[],"class_list":["post-7804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-oracle-cloud-applications"],"acf":[],"translations":[{"blog_id":1,"post_id":7804,"name":"Europe","code":"EN-GB","hreflang":"en-gb","url":"https:\/\/www.version1.com\/blog\/aggregate-data-sources-obiee\/","is_current":false},{"blog_id":13,"post_id":7804,"name":"Americas","code":"EN-US","hreflang":"en-us","url":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","is_current":true}],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)<\/title>\n<meta name=\"description\" content=\"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)\" \/>\n<meta property=\"og:description\" content=\"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/\" \/>\n<meta property=\"og:site_name\" content=\"Version 1 (US)\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-17T15:39:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Using Aggregates and Combining Data Sources in OBIEE\",\"datePublished\":\"2023-08-17T15:39:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/\"},\"wordCount\":1363,\"publisher\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/man-coding-scaled.png.webp\",\"keywords\":[\"Oracle Cloud Applications\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/\",\"name\":\"Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/man-coding-scaled.png.webp\",\"datePublished\":\"2023-08-17T15:39:42+00:00\",\"description\":\"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/man-coding-scaled.png.webp\",\"contentUrl\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/man-coding-scaled.png.webp\",\"width\":2560,\"height\":1707,\"caption\":\"Man coding at desk\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/aggregate-data-sources-obiee\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Aggregates and Combining Data Sources in OBIEE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#website\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\",\"name\":\"Version 1\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#organization\",\"name\":\"Version 1\",\"url\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.version1.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-Favicon-2.png\",\"contentUrl\":\"https:\\\/\\\/www.version1.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-Favicon-2.png\",\"width\":512,\"height\":512,\"caption\":\"Version 1\"},\"image\":{\"@id\":\"https:\\\/\\\/www.version1.com\\\/en-us\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)","description":"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","og_locale":"en_US","og_type":"article","og_title":"Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)","og_description":"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.","og_url":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","og_site_name":"Version 1 (US)","article_published_time":"2023-08-17T15:39:42+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-1024x683.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#article","isPartOf":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/"},"author":{"name":"","@id":""},"headline":"Using Aggregates and Combining Data Sources in OBIEE","datePublished":"2023-08-17T15:39:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/"},"wordCount":1363,"publisher":{"@id":"https:\/\/www.version1.com\/en-us\/#organization"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#primaryimage"},"thumbnailUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-scaled.png.webp","keywords":["Oracle Cloud Applications"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","url":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/","name":"Using Aggregates and Combining Data Sources in OBIEE | Version 1 (US)","isPartOf":{"@id":"https:\/\/www.version1.com\/en-us\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#primaryimage"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#primaryimage"},"thumbnailUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-scaled.png.webp","datePublished":"2023-08-17T15:39:42+00:00","description":"An in-depth walkthrough on using aggregates and combining data sources in OBIEE and insights from our Oracle expert.","breadcrumb":{"@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#primaryimage","url":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-scaled.png.webp","contentUrl":"https:\/\/www.version1.com\/en-us\/wp-content\/uploads\/2023\/12\/man-coding-scaled.png.webp","width":2560,"height":1707,"caption":"Man coding at desk"},{"@type":"BreadcrumbList","@id":"https:\/\/www.version1.com\/en-us\/aggregate-data-sources-obiee\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.version1.com\/en-us\/"},{"@type":"ListItem","position":2,"name":"Using Aggregates and Combining Data Sources in OBIEE"}]},{"@type":"WebSite","@id":"https:\/\/www.version1.com\/en-us\/#website","url":"https:\/\/www.version1.com\/en-us\/","name":"Version 1","description":"","publisher":{"@id":"https:\/\/www.version1.com\/en-us\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.version1.com\/en-us\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.version1.com\/en-us\/#organization","name":"Version 1","url":"https:\/\/www.version1.com\/en-us\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.version1.com\/en-us\/#\/schema\/logo\/image\/","url":"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-Favicon-2.png","contentUrl":"https:\/\/www.version1.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-Favicon-2.png","width":512,"height":512,"caption":"Version 1"},"image":{"@id":"https:\/\/www.version1.com\/en-us\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts\/7804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/comments?post=7804"}],"version-history":[{"count":0,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/posts\/7804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/media\/7249"}],"wp:attachment":[{"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/media?parent=7804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/categories?post=7804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/tags?post=7804"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.version1.com\/en-us\/wp-json\/wp\/v2\/industry?post=7804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}