Not everybody tends to display data warehouse information in the same way. This is why we have created four so-called special dimension members to avoid confusion and establish some uniform ground rules. Do you want to jog your memory on data warehouses, dimensions or fact tables? Be sure to read my previous blog on it, then.
NULL values in records may not only cause errors in calculations, they may also be interpreted differently by data warehouse users. In order to use NULLs in various data warehouse scenarios, we introduce special row members in dimensions tables.
Figure 1: Product dimension table including special members
The Unknown special member is used as a replacement for a missing mandatory value. To illustrate: the sale of a product X, on date A, for customer B. Suppose that a wrong product code was specified, either an invalid one or maybe one that was missing in the sales record. To prevent incorrect or incomplete data from being uploaded into the data warehouse, a possible solution would simply be not to upload this sales fact at all. However, this would impact information analyses that involve other dimensions too. After all, sales reports concerning other dimensions (such as time, customer …) would no longer be generated over the complete data set. Allocating this sales fact to the Unknown special member would offer a fitting answer. As a result, the sales row can be added to the facts table and analysis of sales data involving other dimensions will be complete. So, the Unknown member represents an erroneous situation. It is applied when mandatory dimension values are missing or do not exist in the specific dimension table. Afterwards, when it turns out that the sales fact can be linked to a valid product code, the row can be uploaded again, referring to the correct product.
Sometimes, facts are linked to non-mandatory dimensions. For example: suppose that our fact table registers online customer surveys. A possible dimension would be an optional telephone number record. In many survey results this value would be missing. This is not interpreted as an erroneous situation but as acceptable.
In certain fact tables, the absence of a dimension value is an explicit choice. For example: a vacation trip. Often, some type of insurance (repatriation, accidents, cancellation …) will be offered. However, not opting for an insurance package is an acceptable situation.
It happens that a data warehouse has been operational for some time and that new business needs require the upload of a data set from an old archived system. To illustrate: the production orders from a former ERP system that has been replaced in the meantime. Some dimensions values may no longer be available, such as product categories. In this case, the fact could be expanded with old production records, using the History special member as the value for the product category dimension. This way, old data can be uploaded into an existing model.
The distinctive NULL scenarios mentioned above should no longer prevent an expansion of your data warehouse model. Using special row members in the dimension tables, allows you to continue to use your existing facts tables. The ETL process should map facts to the corresponding special members.
Cookie | Duration | Description |
---|---|---|
ARRAffinity | session | ARRAffinity cookie is set by Azure app service, and allows the service to choose the right instance established by a user to deliver subsequent requests made by that user. |
ARRAffinitySameSite | session | This cookie is set by Windows Azure cloud, and is used for load balancing to make sure the visitor page requests are routed to the same server in any browsing session. |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie records the user consent for the cookies in the "Advertisement" category. |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | CookieYes sets this cookie to record the default button state of the corresponding category and the status of CCPA. It works only in coordination with the primary cookie. |
elementor | never | The website's WordPress theme uses this cookie. It allows the website owner to implement or change the website's content in real-time. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Cookie | Duration | Description |
---|---|---|
__cf_bm | 30 minutes | Cloudflare set the cookie to support Cloudflare Bot Management. |
pll_language | 1 year | Polylang sets this cookie to remember the language the user selects when returning to the website and get the language information when unavailable in another way. |
Cookie | Duration | Description |
---|---|---|
_ga | 1 year 1 month 4 days | Google Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors. |
_ga_* | 1 year 1 month 4 days | Google Analytics sets this cookie to store and count page views. |
_gat_gtag_UA_* | 1 minute | Google Analytics sets this cookie to store a unique user ID. |
_gid | 1 day | Google Analytics sets this cookie to store information on how visitors use a website while also creating an analytics report of the website's performance. Some of the collected data includes the number of visitors, their source, and the pages they visit anonymously. |
ai_session | 30 minutes | This is a unique anonymous session identifier cookie set by Microsoft Application Insights software to gather statistical usage and telemetry data for apps built on the Azure cloud platform. |
CONSENT | 2 years | YouTube sets this cookie via embedded YouTube videos and registers anonymous statistical data. |
vuid | 1 year 1 month 4 days | Vimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. |
Cookie | Duration | Description |
---|---|---|
ai_user | 1 year | Microsoft Azure sets this cookie as a unique user identifier cookie, enabling counting of the number of users accessing the application over time. |
VISITOR_INFO1_LIVE | 5 months 27 days | YouTube sets this cookie to measure bandwidth, determining whether the user gets the new or old player interface. |
YSC | session | Youtube sets this cookie to track the views of embedded videos on Youtube pages. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt-remote-device-id | never | YouTube sets this cookie to store the user's video preferences using embedded YouTube videos. |
yt.innertube::nextId | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | YouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen. |
Cookie | Duration | Description |
---|---|---|
WFESessionId | session | No description available. |