0

我正在使用以下查询(在直接查询模式下连接到 SQL 数据库时)来获取前 12 个月的约会:  

Table.SelectRows(dbo_ReportAppointmentsView, each Date.IsInPreviousNMonths([Date], 12))

  它工作得很好,并且正在生成带有 where 子句的 SQL 查询,例如:

where convert(date, [_].[Date]) >= convert(datetime2, '2015-11-01 00:00:00') and convert(date, [_].[Date]) < convert(datetime2, '2016-11-01 00:00:00'))
 

问题是当当前月份发生变化时(11 月 -> 12 月),它仍在生成具有完全相同日期的 SQL 查询。我预计日期为“2015-12-01”和“2016-12-01”以显示前 12 个月的数据。

在 Power BI 桌面中按下“刷新”按钮会有所帮助,但如果我希望报表自动显示正确的数据,这显然不是一个可维护的解决方案。这是一个错误还是预期的行为?

4

3 回答 3

1

这种行为似乎是一个已知问题

您在对 SQL 使用 Direct Query 时观察到的行为是旧版 Direct Query 体系结构的一个已知问题。在接下来的几个月里,我们将把 SQL Direct Query 迁移到一个新的体系结构中,但不幸的是,在那之前除了手动刷新之外没有其他解决方法。

于 2016-12-13T06:50:46.453 回答
0

如果说“直接查询模式”是指“本机查询”,那么这不是最佳实践,应该避免。

除此之外,尝试用Date.IsInPreviousNMonths类似的东西替换

LocalDT = Date.LocalNow() //May be replaces with desired #date(2016, 11, 25) and likewise
ThisMonthStart = #date(Date.Year(LocalDT), Date.Month(LocalDT), 1),
CompareDate = Date.AddMonths(ThisMonthStart, -12),
Table.SelectRows(dbo_ReportAppointmentsView, each [Date] >= CompareDate)

并查看它是否在查询中生成另一个日期。

如果您确实使用 Native Query,那么这可能是与此模式相关的错误。

于 2016-12-09T22:03:29.817 回答
0

在相对于系统日期(时间)的特定时间段内检查日期(时间)的所有函数都应解释为“.... 上次刷新”。

在我看来,这是预期的行为,即使在直接查询模式下运行:在最后一次刷新时使用查询定义访问最新数据。

我的建议是在您的 SQL 数据库中使用当前系统日期(时间)创建一个字段(或者如果它已经可用,则仅使用它)并根据该字段的值选择您的数据。

于 2016-12-12T04:15:08.030 回答