如何在Power BI

时间:2019-05-13 10:32:04

标签: sql powerbi dax powerquery temporal-tables

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

SQL通过使用允许查询之类的系统版本表来允许此操作

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

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

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

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

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我最近刚刚这样做。 @RADO是正确的;对于导入模式,在Power BI表中每个日期(对于您而言,一个月)都有行。所有工作都在SQL中进行。

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

"persons": [
        {
            "name": "Adam",
            "age": "20",
        },
               {
            "name": "Bob",
            "age": "21",
        },        {
            "name": "Christy",
            "age": "22",
        }    
]
}

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

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 ;

然后,我创建了一个视图,以将该功能与所需日期交叉应用。

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