从事实 table 中删除重复项以正确计算度量
Remove duplicates from fact table to calculate measure correctly
我对数据仓库和维度建模还很陌生。对于一个 uni 项目,我从一个数据库开始,我需要将其转换为数据仓库以进行分析。为了得到一个干净的星型模式,我不得不将一些 table 非规范化为 1 个事实 table。缺点是冗余量。
以下是来自事实table的部分数据:
一个航程由多个货件组成,一个货件可以由多个不同的物品组成。在此示例中,货件 1 的 1-2000 号集装箱包含物品 3,而 2001-5000 号集装箱包含物品 1。显然,这批货件的集装箱总数为 5000。但是,出于数据分析目的,我需要计算每次航程的集装箱总量。这对当前事实 table 提出了一个问题,因为我对每个不同的项目都有一个记录。所以对于航程1,实际总量应该是9200,但是因为重复所以我最终会得到19400,导致计算不正确。
我需要找到一种方法来消除计算中的重复项,但我找不到这样做的方法。任何帮助将不胜感激。
您需要做的是按您的货件(CTE, inner query, temp table 等)分组以获得每批货件的集装箱数量,然后按您的航程分组以获得每次航程的集装箱数量。
这是一个带有内部查询的示例:
SELECT voyage_id, SUM(num_ship_containers) AS num_voyage_containers
FROM (
SELECT voyage_id, shipment_id, MAX(container_end) AS num_ship_containers
FROM ShippingWarehouse
GROUP BY voyage_id, shipment_id
) AS ship_data
GROUP BY voyage_id;
voyage_id
num_voyage_containers
1
9200
我对数据仓库和维度建模还很陌生。对于一个 uni 项目,我从一个数据库开始,我需要将其转换为数据仓库以进行分析。为了得到一个干净的星型模式,我不得不将一些 table 非规范化为 1 个事实 table。缺点是冗余量。
以下是来自事实table的部分数据:
一个航程由多个货件组成,一个货件可以由多个不同的物品组成。在此示例中,货件 1 的 1-2000 号集装箱包含物品 3,而 2001-5000 号集装箱包含物品 1。显然,这批货件的集装箱总数为 5000。但是,出于数据分析目的,我需要计算每次航程的集装箱总量。这对当前事实 table 提出了一个问题,因为我对每个不同的项目都有一个记录。所以对于航程1,实际总量应该是9200,但是因为重复所以我最终会得到19400,导致计算不正确。
我需要找到一种方法来消除计算中的重复项,但我找不到这样做的方法。任何帮助将不胜感激。
您需要做的是按您的货件(CTE, inner query, temp table 等)分组以获得每批货件的集装箱数量,然后按您的航程分组以获得每次航程的集装箱数量。
这是一个带有内部查询的示例:
SELECT voyage_id, SUM(num_ship_containers) AS num_voyage_containers
FROM (
SELECT voyage_id, shipment_id, MAX(container_end) AS num_ship_containers
FROM ShippingWarehouse
GROUP BY voyage_id, shipment_id
) AS ship_data
GROUP BY voyage_id;
voyage_id num_voyage_containers 1 9200