需要帮助将日期函数从SQL Server转换为DAX



我正在尝试将以下日期函数从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-SQLDAX
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> )

相关内容

最新更新