我正在尝试将以下日期函数从t-sql转换为dax。我的目标是把我从SQL中得到的adjusted_date列放到PowerBi中。
select
EOMONTH(DATEADD (dd, -1, DATEADD(qq, DATEDIFF(qq, 0, [date]) +1, 0)), 1)
;
到目前为止,我有DATEDIFF作为
DATEDIFF( 0, [date], QUARTER)
但是我不知道怎么做DATEADD。为此,我有这个:
DATEADD(0, DATEDIFF( 0, [date], QUARTER)+1, quarter)
我从https://dax.guide/dateadd/
我知道EOMONTH存在于DAX中,如下所示:https://learn.microsoft.com/en-us/dax/endofmonth-function-dax
我希望有人能给我一个提示或帮助我。谢谢。
date,adjusted_date
2020-01-01,2020-04-30
2020-02-05,2020-04-30
2020-03-22,2020-04-30
2020-04-01,2020-07-31
2020-05-28,2020-07-31
2020-06-19,2020-07-31
2020-07-01,2020-10-31
2020-08-01,2020-10-31
2020-09-17,2020-10-31
2020-10-01,2021-01-31
2020-11-09,2021-01-31
2020-12-20,2021-01-31
TLDR:DAX
ENDOFMONTH(DATEADD(ENDOFQUARTER([date]), 1, DAY))
虽然我们可以在两种查询语言之间翻译表达式,但理解原始SQL表达式并能够用而不是SQL来解释它是很重要的。这将有助于避免混淆,但也将帮助您确定替代的本机函数,这些函数将使用更直观、更易于维护的语法产生相同的结果。
- 代码的可读性始终很重要,如果代码的意图不明显,那么未来的维护任务可能会误解您的逻辑,并将其完全重构为其他内容
您的初始SQL是在下一季度中选择第一个月的最后一天,但它是以一种复杂的方式到达那里的,它将进入该季度的最后一天,然后找到下一个月的最后一日。
SQL
EOMONTH(DATEADD (dd, -1, DATEADD(qq, DATEDIFF(qq, 0, [date]) +1, 0)), 1)
-- Simplified to:
EOMONTH(DATEADD(qq, DATEDIFF(qq, 0, [date]) +1, 0))
因此,通过交换参数,可以使用等效函数将其直接转换为DAX,在DAX中,日期函数的间隔是最后一个参数,在SQL中是第一个参数。
Transact-SQL | DAX |
---|---|
DATEDIFF(Transact-SQL( | DATEDIFF(DAX函数( |
DATEDIFF ( datepart , startdate , enddate ) | DATEDIFF ( <Date1>, <Date2>, <Interval> ) |
DATEADD(Transact-SQL( | DATEADD(DAX函数( |
DATEADD ( datepart , number , date ) | DATEADD( <Dates>, <NumberOfIntervals>, <Interval> ) |
EOMONTH(Transact-SQL( | ENDOFMONTH(DAX函数( |
EOMONTH ( start_date [, month_to_add ] ) | ENDOFMONTH ( <Dates> ) |