从事实 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

Try it out!