我需要管理多年来每年约 100,000 条记录的大型数据集。
使用自定义查询通过 SOAP 连接器检索数据。
每条记录都有“基本信息”和“历史信息”,需要用不同的 SOAP 连接器提取。
将来,需要从其他数据库/源/API 中检索新记录/年份的记录。
通过 SOAP 检索 100,000 条基本信息记录大约需要 2 分钟。包括历史信息大约需要 20-30 分钟(每条记录平均有 10 条“历史记录”作为“子记录”)
只有“当前”时期的数据需要定期更新。实际上,过去年份的数据“永远”不需要更新,或者仅在偶尔有明确需求时才需要更新,例如,在添加新属性时。
因此我尝试了以下设计,以防止更新时间过长:
- 我创建了一个函数 getDataBySOAP(start,end,includeHistory)。这完成了所有工作(使用不同的 SOAP 请求等)
- 然后对每年的数据进行 1 次查询,比如说“data22”、data23、data24 等,只需调用 SOAP 函数(这样将来就可以从另一个函数/DB 中检索另一个时期的数据)。所有查询都设置为永不自动更新(所有检查都已关闭),除了“当前”查询
- 然后 1 查询,说 allData,将所有年份的数据附加在一起
但是现在,当我在 allData 上说“更新”时,更新会更新所有内容,包括历史记录。因此,在更新准备就绪之前,我们准备喝很多咖啡,因为所有查询都已更新。
出了什么问题?我应该以不同的方式设计查询吗?现在,历史数据位于附加的可选列中。但也许我应该将它们分开放在单独的查询中。但即便如此,似乎更新也会触发完整更新,需要几个小时。
注意:我是 Excel/VBA 方面的专家。但这是我的第一个 Power query/Power BI 项目……所以真的是新手
谢谢你的提示。C.
这就是 Power Query 的工作方式。如果您有一个引用其他查询的主查询,那么每次刷新时都会重新评估它们。对于您来说,为什么不将主查询作为 DAX 中的计算表呢?这样,历史表将被存储而不会更新(还将它们标记为隐藏,因为它们不会在计算表之外使用),新表可以设置为更新,计算表会将它们全部附加在一起。缺点是需要额外的存储空间(您将存储历史数据两次),但这将通过更快的刷新时间抵消。
另一个选项是增量刷新,如果您想正确配置它:https://learn.microsoft.com/en-us/power-bi/connect-data/incremental-refresh-overview