{"id":302,"date":"2023-11-30T11:30:04","date_gmt":"2023-11-30T10:30:04","guid":{"rendered":"https:\/\/bitwise.exposed\/?p=302"},"modified":"2026-03-16T09:38:48","modified_gmt":"2026-03-16T08:38:48","slug":"types-of-fact-tables","status":"publish","type":"post","link":"https:\/\/bitwise.exposed\/index.php\/2023\/11\/30\/types-of-fact-tables\/","title":{"rendered":"Types of Fact tables"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In the context of data warehousing and business intelligence, there are three main types of fact tables based on the nature of the data they store and the business processes they represent.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Transactional Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Transactional fact tables serve as the bedrock of data warehousing, capturing granular details of individual business transactions at the finest level of granularity. They meticulously record specific events such as sales, orders, or interactions, providing a comprehensive and unambiguous record of business activities. Analyzing data at this transactional level allows for a nuanced understanding of operational intricacies, making these fact tables essential for detailed business intelligence and decision-making processes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Nature:<\/mark> Transactional fact tables store detailed, atomic-level data about <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">specific<\/mark> business <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">events<\/mark> or transactions.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Granularity:<\/mark> The granularity of these fact tables is <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">typically at the lowest level<\/mark> of detail, capturing <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">individual transactions<\/mark>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Example:<\/mark> In a retail environment, a transactional fact table might store details about each item sold in every transaction, including information such as product ID, quantity sold, price, and transaction timestamp<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">.<br><br>Use Cases: <\/mark>Transactional fact tables are suitable for scenarios where a high level of detail is necessary, and analysis needs to be performed at the transaction level.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Periodic Snapshot Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Periodic snapshot fact tables offer a strategic lens into business performance by aggregating data at predefined intervals, providing a summarized view of key metrics over time. These fact tables condense detailed information into manageable periodic snapshots, enabling organizations to track trends, identify patterns, and make informed decisions based on historical performance. By capturing data at regular intervals\u2014whether daily, weekly, or monthly\u2014periodic snapshot fact tables facilitate a comprehensive analysis of business activities, supporting strategic planning and trend analysis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Nature:<\/mark> Periodic snapshot fact tables capture aggregated data at <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">specific, predefined intervals<\/mark> or periods of time.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Granularity:<\/mark> The granularity is <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">typically coarser than that of transactional fact tables<\/mark>, as data is aggregated over time periods (e.g., daily, weekly, monthly).<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Example:<\/mark> In a sales environment, a periodic snapshot fact table might store aggregated sales data for each product at the end of each month, including total sales, units sold, and average price.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Use Cases: <\/mark>Periodic snapshot fact tables are useful for monitoring trends and changes over time, especially when the focus is on periodic summaries.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Accumulating Snapshot Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Accumulating snapshot fact tables are the dynamic storytellers of business processes, recording key milestones and stages in a workflow to illuminate the progression of activities over time. Unlike traditional fact tables, accumulating snapshots uniquely capture both transactional details and aggregated metrics, providing a holistic view of critical events in a business process. These fact tables are instrumental in monitoring and analyzing the lifecycle of processes, facilitating a nuanced understanding of how activities evolve and enabling strategic decision-making based on comprehensive process insights.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-primary-color\">Nature:<\/mark> Accumulating snapshot fact tables are designed to <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">track changes in a process or workflow over time<\/mark>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-primary-color\">Granularity:<\/mark> These tables often <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">include both transactional and aggregated data, capturing key events<\/mark> or milestones in a business process.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-primary-color\">Example:<\/mark> In a manufacturing process, an accumulating snapshot fact table might track the progress of a product through various stages such as order received, manufacturing started, quality check completed, and product shipped.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-primary-color\">Use Cases:<\/mark> Accumulating snapshot fact tables are valuable for analyzing and monitoring the progression of specific processes or workflows, providing a comprehensive view of how data changes over time.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Factless Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Factless fact tables capture events or transactions without storing numerical measures, emphasizing the relationships between dimensions. These tables, devoid of quantitative data, are commonly used to represent events like appointments, actions, or statuses, providing a valuable tool for tracking and analyzing occurrences across various dimensions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Nature<\/mark>: Factless events capture business activities <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">without relying on numerical measures<\/mark>, emphasizing the interconnections and contextual relationships among different dimensions.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Granularity<\/mark>: The granularity of factless events is context-dependent. For instance, in scenarios like tracking a binary state such as &#8222;promotion activation,&#8220; the granularity is low, capturing specific but limited details. The level of granularity varies <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">based on the nature of the events<\/mark> and the business requirements they address.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Example<\/mark>: Imagine a &#8222;State Change&#8220; event with dimensions like change ID, category, date, and location, representing transitions between different states. This provides a granular representation of state changes without the need for specific quantitative values.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Use Case<\/mark>: Factless events prove valuable for analyzing the impact of state changes, tracking shifts in visibility, and understanding patterns and relationships within the data. This approach allows for a nuanced exploration without being constrained by numerical values or business-specific contexts.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Aggregate Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">These tables store summarized values derived from more detailed fact tables, providing a faster and more efficient way to respond to common analytical queries. Strategically creating aggregate fact tables, could be an option for transparent and flexible modelling approaches.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Nature<\/mark>: Storing pre-computed, summarized values <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">derived from more detailed fact table<\/mark>s.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Granularity<\/mark>: The granularity <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">depents on parent <\/mark>fact table <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">and the level of aggregation<\/mark>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Example<\/mark>: For instance, summarizing the total quantity sold and sales amount for each product category on a monthly basis.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Use Case<\/mark>: Performance issues or very useful as a symantic layer to adjust granularity for further modeling or analytics. See example at &#8218;consolidated fact tables, different granularity&#8216;.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Consolidated Fact Tables<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Combining facts from various processes into a unified fact table could be an option, to make development and, or analysis more transparent. Performance could be a benefit, but opposing effects must also be taken into account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Nature<\/mark>: Combined fact tables <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">unify data from various fact tables<\/mark>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Granularity<\/mark>: The granularity is <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">dependent by the fact table, with the lowest granularity<\/mark>. Further and most important, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">all facts needs to be expressed in the same granularity<\/mark>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Example<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">Different granularity<\/mark>; for instance, merging actual sales data with sales forecasts into a single fact table But it&#8217;s to be expected that forecast (low) and fact (high) wouldn&#8217;t have the same granularity. Therefore adjusting that granularity, needs aggregation layer. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-variant-text-accent-color\">Same granularity<\/mark>; for instance, merging similar business processes from separate fact tables together, like order, invoice, returns.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">Use Case<\/mark>: Combining similar facts like order, invoice, return into a combined fact table could be an option to reduce cardinality if they use entirely or predominantly the same dimension attributes. Especially for attributes with extrem high cardinality, like order number, that could be a real advantage if the storage technology provides column compression.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Usecase Stock Data<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-surface-brand-secondary-color\">These different types of fact tables allow for flexibility in modeling and analyzing various aspects of business operations. The choice of which type to use depends on the specific requirements of the business and the type of analysis that needs to be performed.<\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even if Snap Shot Fact Tables typically contain aggregated data, they aren&#8217;t necessarily smaller in data volume, then an equivalent Transactional Fact Table would be. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example stock data, with a lot of transactions but not every day for each item. This data could be efficiantly compressed and stored, due to it&#8217;s low cardinality in a Transacitonal Fact Table (if your storage engine provides compression). But it&#8217;s likely that a lot of transactions aren&#8217;t necessary to calculate the daily stock value, e.g. single events each time the item is moved and tracked within a warehouse (good receipt, storage, goods issue). That could lead to poor query performance and complex business logic, to calucalte something like the current stock value. If there&#8217;s no need to provide granularity for &#8222;technical&#8220; stock movents, it could be a good approach to aggregate and provide these data in a Periodic Snapshot Fact Table.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the context of data warehousing and business intelligence, there are three main types of fact tables based on the nature of the data they store and the business processes they represent. Transactional Fact Tables Transactional fact tables serve as the bedrock of data warehousing, capturing granular details of individual business transactions at the finest [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":308,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,21],"tags":[],"class_list":["post-302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-warehouse","category-modeling-techniques"],"_links":{"self":[{"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/posts\/302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/comments?post=302"}],"version-history":[{"count":10,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/posts\/302\/revisions"}],"predecessor-version":[{"id":359,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/posts\/302\/revisions\/359"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/media\/308"}],"wp:attachment":[{"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/media?parent=302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/categories?post=302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitwise.exposed\/index.php\/wp-json\/wp\/v2\/tags?post=302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}