本主题介绍时间序列函数与筛选器函数之间的差异,以及如何实施筛选器函数。此信息对工作簿和经典仪表盘均适用。
时间序列函数与筛选器函数
通过时间序列函数 Ago
和 Todate
可以很简单地创建用于计算 year-ago、year-to-date
等内容的度量。此方法适用于业务用户报表;但是,这些函数会生成将显著降低性能的复杂查询。此外,每次在报表中使用其中一个函数时,都会使用更多的数据库资源生成一个额外的子查询。
在经典仪表盘中,为了实现同样的结果,通常可以结合使用基本度量和 Filter
函数来筛选适当的时段,而不是使用时间序列函数。此方法对于业务用户报表来说可能过于复杂,但它适合用在由 IT 团队预定义的仪表盘中。使用此方法时,生成的物理 SQL 代码简单得多且更高效,并且不需要额外的子查询。这意味着 SQL 查询运行速度会更快而且使用的数据库资源会更少,从而降低数据库的整体 CPU 占用率和输入输出调用。
下图显示了一个物理查询示例,这是在同一报表中同时使用基本度量和 Month Ago
度量时生成的物理查询。将生成两个查询。
下图显示了改用 Filter
函数时为单个查询生成的 SQL 代码。
在仪表盘中使用提示实施筛选器函数
在大多数实施中,仪表盘已经包括提示,以便用户可以选择他们要查找的月份。第一步是标识将需要基于用户所选内容进行筛选的时段。
在此示例中,日历维包括 Julian Period Number
列,因为它使计算变得更加轻松。在没有 Julian Period Number
的情况下,这也是可行的,但需要更复杂的公式来计算所选时段。
Month
提示以添加表示变量 (MonthSelected
)。
Julian Period Number
并将其放入另一个变量 (PeriodNumberSelected
) 中。第二个提示不会向最终用户显示,而是隐藏在仪表盘中,并根据变量 MonthSelected
自动计算值。
Julian Period
提示路径。
Month
列中的全局筛选器,然后根据需要使用基于 Julian Period Number
的列公式筛选器函数。以下是一些示例:
Current Month: Filter("Revenue Metrics"."Revenue" using "Time"."Julian Month Number"=@{PeriodNumberSelected}{80800})
Month Ago: Filter("Revenue Metrics"."Revenue" using "Time"."Julian Month Number"=@{PeriodNumberSelected}{80800}-1)
Year Ago: Filter("Revenue Metrics"."Revenue" using "Time"."Julian Month Number"=@{PeriodNumberSelected}{80800}-12)
Year to date: Filter("Revenue Metrics"."Revenue" using "Time"."Julian Month Number"<=@{PeriodNumberSelected}{80800} and “Time”.”Year”=@{YearSelected}{2019})
在工作簿中使用参数实施筛选器函数
您可以在工作簿中应用相同原则。提示和表示变量将替换为仪表盘筛选器和参数。
创建三个参数:MonthSelected、PeriodNumberSelected 和 YearSelected。仪表盘筛选器的画布中仅显示参数 MonthSelected。
参数 MonthSelected 的可能值基于一个选择所有月份的逻辑 SQL 查询来定义。
对于参数 PeriodNumberSelected 和 YearSelected,不填充“可能的值”。
.jpg 的说明
仅使用一个逻辑查询来填充“初始值”,该查询基于 MonthSelected 值进行筛选。
.jpg 的说明