我在Power BI中使用DAX进行计算有以下4个步骤: 假设我有以下格式的 ISO 周数:名称为 [Version] 的列中的 YYYY-WW, 我用这 4 个步骤计算每周的第一天,需要 4 个中间列:
步骤1:
FirstSeventhDayOfYear =
VAR semaineNb = RIGHT([Version], 2) //get the week number
VAR yearNb = LEFT([Version], 4) // get the year
VAR FirstSeventhDayOfYear_ = DATE(yearNb, 1, 7) //get the Jan 7th of this year
Return FirstSeventhDayOfYear_
新专栏中的步骤 2:
FirstThursdayOfYear =
VAR yearNb = LEFT([Version], 4)
VAR FirstThursdayOfYear_ = IF( WEEKDAY( DATE( yearNb, 1, 1 ), 2)>=5, DATEADD( 'Table'[FirstSeventhDayOfYear].[Date] , -(WEEKDAY( DATE( yearNb, 1, 1 ), 2)-4), DAY ), DATEADD( 'Table'[FirstSeventhDayOfYear].[Date] , -(WEEKDAY( DATE( yearNb, 1, 1 ), 2)+3) , DAY))
Return FirstThursdayOfYear_
另一新专栏中的步骤 3 :
ThursdayForSemaine =
VAR semaineNb = RIGHT([Version], 2)
VAR yearNb = LEFT([Version], 4)
VAR ThursdayForSemaine_ = DATEADD('Table'[FirstThursdayOfYear].[Date], 7*(semaineNb-1), DAY)
Return ThursdayForSemaine_
第4步,最后一步:
FirstDayOfVersionWeek =
DATEADD( 'Table'[ThursdayForSemaine].[Date] , -2, DAY)
我希望仅在一个 DAX 公式和一列(没有中间列)中完成所有这一切, 但我无法管理它,因为 DATEADD 函数抱怨(当我将中间计算的结果存储在一个变量中时)该变量不是表。将结果封装在 {} 中以获取列表也不起作用...该消息是 DATEADD 函数无法处理使用 ADDCOLUMNS 或 SUMMARIZE 创建的列
这个问题有解决办法吗?
谢谢,
不要使用
DATEADD(x, y, DAY)
,只需使用添加/减去日期的天数即可,例如:DATE(2023, 1, 1) - 1
将为您提供 DATE(2022, 12, 31)
。
所以你的最终公式可能看起来像(未经测试):
FirstDayOfVersionWeek =
VAR semaineNb = VALUE( RIGHT([Version], 2) ) //get the week number
VAR yearNb = VALUE( LEFT([Version], 4) ) // get the year
VAR FirstSeventhDayOfYear = DATE(yearNb, 1, 7) //get the Jan 7th of this year
VAR FirstThursdayOfYear =
IF(
WEEKDAY( DATE( yearNb, 1, 1 ), 2) >=5,
FirstSeventhDayOfYear - (WEEKDAY( DATE( yearNb, 1, 1 ), 2) - 4),
FirstSeventhDayOfYear - (WEEKDAY( DATE( yearNb, 1, 1 ), 2) + 3)
)
VAR ThursdayForSemaine = FirstThursdayOfYear + 7*(semaineNb - 1)
VAR FirstDayOfVersionWeek_ = ThursdayForSemaine - 2
RETURN FirstDayOfVersionWeek_