我在 Power BI 中有一个带有两个参数的查询:开始日期和结束日期。每当我传递这些日期时,它都会返回一个日期表,其中包含根据此日期范围创建的几列,例如日期、季度年、年、月名……等。我们可以在 ADF 中创建一个以两个参数为输入并根据提供的日期返回计算表的映射数据流吗?有没有返回日期范围的函数?
问问题
409 次
2 回答
1
对于您的请求:“我希望我在 ADF 映射数据流中传递两个日期开始日期和结束日期,并且数据流将创建一个包含该日期行数的列,例如“日期”。这有什么功能吗? Exam. Start Date=20-01-2019, End Date=20-01-2020 那么日期列值应为:20-01-2019 21-01-2019 ...... .... 20-02-2020",根据数据工厂文档和我的经验,答案是否定的,我们无法在数据流中实现。
于 2020-12-10T15:13:15.483 回答
0
有一个解决方案,但它有点棘手。
TL;博士
一般数据流如下所示:
- 我们需要一个只有一行的虚拟源,其中包含任何内容。
- 然后我们派生出一个列,在该列中我们使用
mapLoop()
表达式来创建一个包含我们想要为其获取行的所有日期的数组。 - 最后,我们需要展平数组列,这将导致每个数组条目一行,因此每个日期一行。
演练
资源dummy
每个数据流都需要一个源,我们只需要一行来使我们的数据流工作。为了实现这一点,我在我的数据湖中创建了一个名为empty
CSV 类型的数据集,其中包含以下内容:
empty
""
派生列days
这就是魔法发生的地方!
我们创建一个新列dates
,它是我们希望在日期表中包含的所有日期的数组:
在这种情况下,我们想要一个从 2019 年 1 月 1 日开始到未来一年的日期表。完整的表达式如下所示:
mapLoop(
addDays(currentDate(), 365) - toDate(2019-01-01),
addDays(toDate(2019-01-01), #index)
)
这就是这里发生的事情:
- 该
mapLoop()
函数构建一个元素数组。您指定要拥有的元素数量和计算每个元素的 lambda 表达式。例如,mapIndex([1, 2, 3, 4], #item + 2 + #index)
结果[4, 6, 8, 10]
addDays(currentDate(), 365) - toDate('2019-01-01')
是我们的开始(2019-01-01)和结束日期(从现在开始的未来 1 年)之间的天数,因此是我们希望在结果数组中包含的日期数。addDays(toDate(2019-01-01), #index)
#index
通过在我们的开始日期上加上天数来计算每个数组项。这是针对我们之前计算的天数执行的,#index
是数组位置。因此,数组的第一个元素将是2019-01-01 + 1
,第二个2019-01-01 + 2
,依此类推。
展平
最后,您需要一个展平转换,它将数组中的每个项目扩展到其专用行。我们还可以empty
在此步骤中关闭无用的列:
这最终导致了我们想要实现的目标:
参考
于 2021-04-29T13:49:15.660 回答