1

我正在构建一个使用一组 SQL 临时表作为源的 Power BI 报表。我想为用户提供从日期切片器中选择月份的机会,并根据该选择,报告将显示该日期的有效数据。

SQL 通过使用允许查询的系统版本表来实现这一点,例如

SELECT * from table FOR SYSTEM_TIME BETWEEN 'date1' and 'date2'

这将返回表中的所有有效值,就好像查询是在这些日期之间运行的一样。

我找不到任何有关如何在 Power BI 中使用临时表的文档。

在 Power BI 中执行此操作的最佳方法是什么?

4

1 回答 1

0

我最近才这样做。@RADO 是正确的;对于导入模式,Power BI 表中的每个日期(或月份,在您的情况下)都有行。所有的工作都在 SQL 中。

首先,我创建了一个 inline(-able) 表值函数,该函数接受 SYSTEM_TIME AS OF 子句的 datetime2 并根据需要返回所需的带有 in 连接的结果集。

SELECT 
    header.*, 
    detail.*
FROM header FOR SYSTEM_TIME AS OF @utcTimeStamp AS header
LEFT JOIN detail FOR SYSTEM_TIME AS OF @utcTimeStamp AS detail ON detail.header_id = header.id ;

您必须调整 @utcTimeStamp 以便它为您的日期或月份的含义提供适当的瞬间。

--- Ajust to match your time period datatype
DECLARE @utcTimeStamp datetime2(3) = DATEADD(ms, -1, DATEADD(DAY, 1, CAST(@date AS datetime2(3)))) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC';

然后,我创建了一个视图,将函数与所需的日期交叉应用。

当我发现查询视图需要很长时间时,我创建了一个缓存表和 SQL 代理作业来插入从最后一个日期到昨天的结果(在确保昨天在我们所有时区中结束的时间)。如果您只需要每月结果,则可能不需要此步骤。

于 2019-05-15T14:05:53.837 回答