如何跟踪 Power BI 中的每日变化?
How to track day wise change in Power BI?
我正在使用来自 https://www.mohfw.gov.in/ 网站的数据创建 Power BI 报告,该网站提供所有印度 states/union 地区的最新冠状病毒数据。
数据格式如下 -
+-----+-----------------------------+-----------+-------+-------+
| SNo | State | Confirmed | Cured | Death |
+-----+-----------------------------+-----------+-------+-------+
| 1 | Andaman and Nicobar Islands | 14 | 11 | 0 |
| 2 | Andhra Pradesh | 603 | 42 | 15 |
| 3 | Arunachal Pradesh | 1 | 0 | 0 |
| 4 | Assam | 35 | 12 | 1 |
| 5 | Bihar | 86 | 37 | 2 |
他们的网站每天都用新数据刷新,所以没有日期明智的跟踪器。我想在每个州的情况下跟踪每天的变化(increment/decrements),有什么方法可以在 Power BI 中对其建模以实现这一点?
现在我正在做的是每天从网页下载 table 并添加一个日期列,这将是今天的日期 (getdate()
) 并将数据加载到 SQL table。因此,每天我都会在 table 中为每个带有当天日期戳的州插入一行,然后我可以从前一天的数据中减去它以查看更改,但我觉得这是一种低效的方式和table尺寸每天都在增加。
因此,任何改进它的建议,无论是通过更改 Power BI 数据模型还是 SQL,我们都将不胜感激。
上下文
考虑到数据源根据 SCD 1(覆盖)进行更新,跟踪每日变化的唯一方法是每天对数据进行历史记录。在实践中,安排每天加载数据源并存储当天的新数据。
回答
您正在以正确的方式实施 SCD 2(更改时创建新记录)。重要的是要确保为每条记录添加一个技术字段,并在其生成时加上时间戳,这样您可以稍后研究趋势。
额外
您最终可以通过规范化模型来优化此方法,以减小您正在应用 SCD 2(在更改时创建新记录)的 table 的大小。
请让我举一个简单的例子。考虑 table 具有:
- 只有 1 条记录
- 1000 个字段,其中只有 1 个字段 (LAST_UPDATE) 可以使用 SCD 2 更改(更改时创建新记录)
如果LAST_UPDATE每天更改 100,000 次,则每天都会触发创建同一条记录的 100,000 个新版本(因为我们跟踪其更改)。因此,一年后 table 仍会有 1,000 个字段和 36,500,000 条记录。相反,如果我们规范化模型,使 LAST_UPDATE 字段(使用 SCD 2 进行历史化)存储在单独的 table 中,一年后我们将得到一个 table,其中包含 1 条记录和 999 列, 和一个不同的 table,有 1 列和 36,500,000 条记录。
如果您的数据库是一个行数据库,您将从规范化模型中获益良多。相反,如果您的数据库是列式数据库,那么一切都已经处理好了,因为每一列都是单独压缩的,而不是按行压缩的。
我正在使用来自 https://www.mohfw.gov.in/ 网站的数据创建 Power BI 报告,该网站提供所有印度 states/union 地区的最新冠状病毒数据。
数据格式如下 -
+-----+-----------------------------+-----------+-------+-------+
| SNo | State | Confirmed | Cured | Death |
+-----+-----------------------------+-----------+-------+-------+
| 1 | Andaman and Nicobar Islands | 14 | 11 | 0 |
| 2 | Andhra Pradesh | 603 | 42 | 15 |
| 3 | Arunachal Pradesh | 1 | 0 | 0 |
| 4 | Assam | 35 | 12 | 1 |
| 5 | Bihar | 86 | 37 | 2 |
他们的网站每天都用新数据刷新,所以没有日期明智的跟踪器。我想在每个州的情况下跟踪每天的变化(increment/decrements),有什么方法可以在 Power BI 中对其建模以实现这一点?
现在我正在做的是每天从网页下载 table 并添加一个日期列,这将是今天的日期 (getdate()
) 并将数据加载到 SQL table。因此,每天我都会在 table 中为每个带有当天日期戳的州插入一行,然后我可以从前一天的数据中减去它以查看更改,但我觉得这是一种低效的方式和table尺寸每天都在增加。
因此,任何改进它的建议,无论是通过更改 Power BI 数据模型还是 SQL,我们都将不胜感激。
上下文
考虑到数据源根据 SCD 1(覆盖)进行更新,跟踪每日变化的唯一方法是每天对数据进行历史记录。在实践中,安排每天加载数据源并存储当天的新数据。
回答
您正在以正确的方式实施 SCD 2(更改时创建新记录)。重要的是要确保为每条记录添加一个技术字段,并在其生成时加上时间戳,这样您可以稍后研究趋势。
额外
您最终可以通过规范化模型来优化此方法,以减小您正在应用 SCD 2(在更改时创建新记录)的 table 的大小。
请让我举一个简单的例子。考虑 table 具有:
- 只有 1 条记录
- 1000 个字段,其中只有 1 个字段 (LAST_UPDATE) 可以使用 SCD 2 更改(更改时创建新记录)
如果LAST_UPDATE每天更改 100,000 次,则每天都会触发创建同一条记录的 100,000 个新版本(因为我们跟踪其更改)。因此,一年后 table 仍会有 1,000 个字段和 36,500,000 条记录。相反,如果我们规范化模型,使 LAST_UPDATE 字段(使用 SCD 2 进行历史化)存储在单独的 table 中,一年后我们将得到一个 table,其中包含 1 条记录和 999 列, 和一个不同的 table,有 1 列和 36,500,000 条记录。
如果您的数据库是一个行数据库,您将从规范化模型中获益良多。相反,如果您的数据库是列式数据库,那么一切都已经处理好了,因为每一列都是单独压缩的,而不是按行压缩的。