获取一年中的第几周 - Azure 数据工厂中的表达式和函数

Get week of year - expressions and functions in azure data factory

我是 ADF 的新手,我正在尝试对一个变量进行参数化,该变量将年和一年中的一周作为输入;例如,202042 或 202102

深入挖掘后,我创建了以下函数,但似乎 weekOfYear 不可用。

在 ADF 中获取 weekOfYear 的方法是什么?

@concat('PREFIX',
formatdatetime(utcnow(), 'yyyy'),
weekOfYear((formatdatetime(utcnow(), 'yyyyMMdd'))),
‘.SUFFIX’)

目前无法直接实现,您将不得不使用映射数据流。

您可以从 this link

获取更多信息

执行此操作的最简单方法是在应该包含此列的日期仓库日期维度中查找它。如果没有,请咨询您的数据架构师。

如果您确实需要计算它,那么如果您有一些 SQL 计算,您可以使用查找 activity 和 SQL,如下所示:

sp_executesql N'select datepart(week,getdate()) weekOfYear'

这返回了以下结果:

Output
{
    "firstRow": {
        "weekOfYear": 6
    },
...

Microsoft SQL 数据库(无论是 IaaS / box 产品、Azure SQL 数据库、托管实例还是 Azure Synapse Analytics)也作为 DATEPART 的一部分支持 ISO 周功能,所以你可以这样做:

sp_executesql N'SELECT DATEPART( iso_week, GETDATE() ) isoWeekNum'

这也可以在核心 ADF(而不是映射数据流)中使用内置函数实现。 ADF 确实支持日期函数 dayOfYeardayOfWeek 以及 Week of Year 实际上只是根据维基百科文章对这两个变量进行数学计算:

在 ADF 中作为表达式实现的计算如下所示:

@string(div(sub(add(10, dayOfYear(utcNow())), dayOfWeek(utcNow())),7))

NB 这是 不是 ISO 周,而是 一年中的一周 并且 ADF dayOfWeek 函数根据 the documentation 以星期日作为 0 开始。我在这里将其转换为字符串,以便将其分配给 ADF 中的变量,但这取决于您在哪里使用表达式。

Mapping Data Flows 也支持功能 weekOfYear,因此如果您已经在使用 Mapping Data Flows,请考虑一下。