计算power pivot中两个日期之间的工作日数
Calculate the number of business days between two dates in power pivot
我正在寻找一个公式来计算权力枢纽中两个日期之间 weekdays/business 天的天数。
我在 T-SQL 中使用以下查询
执行相同的操作
DATEDIFF(dd, Date1, GETDATE()) - (DATEDIFF(wk, Date1, GETDATE()) * 2) -
CASE WHEN DATEPART(dw, Date1) = 1 THEN 1 ELSE 0 END +
CASE WHEN DATEPART(dw, GETDATE()) = 1 THEN 1 ELSE 0 END END
我正在 PowerPivot 中寻找类似的查询。
首先,您需要创建一个 table 日期。这将帮助您解决这个问题,并使您能够使用许多其他 Time Intelligence Functions。您可以手动创建或使用
CalendarDate | Month Key | Month Name | Quarter Name | Year
-----------------------------------------------------------
1/1/2014 | 1.00 | Jan | Q1 | 2014
1/2/2014 | 1.00 | Jan | Q1 | 2014
...
2/1/2014 | 2.00 | Feb | Q1 | 2014
....
8/1/2014 | 8.00 | Aug | Q3 | 2014
..
9/2/2014 | 9.00 | Sep | Q3 | 2014
..
12/16/2014 | 12.00 | Dec | Q4 | 2014
在您的 Dates Table 中可以创建一个计算列来确定每一天是否是工作日。调用列 IsWeekday
=SWITCH(WEEKDAY([CalendarDate]),7,FALSE(),1,FALSE(),TRUE())
如果星期几是一周中的第 7 天或第 1 天,SWITCH 语句将 return 为假 (Saturday/Sunday)
现在,在包含您的交易的 table 中,您可以创建一个名为“工作日数”的新计算列。这将
=CALCULATE(COUNTA(Dates[IsWeekday]),
DATESBETWEEN(Dates[CalendarDate],
TransactionTable[date1],
TransactionTable[date2]
)
)
这里有两篇我推荐的与此方法相关的文章。
另一种解决方案是使用以下 dax 代码创建一个快速度量列:
WeekDays =
SUMX(
SELECTCOLUMNS(
CALENDAR(min('MyTable'[Time1]), min('MyTable'[Time2])),
"Date", min('MyTable'[Time1]),
"BDay", IF(WEEKDAY([Date],3) < 5, 1, 0)
),
[BDay]
)
我在寻找一种在 Power BI 中计算工作日的算法时遇到了这个问题。我找到的解决方案建立在生成表的基础上(手动或自动)。他们确实工作。但就像最初的问题一样,我希望它只是算术。
所以尽管问题得到了回答,但如果其他人正在寻找与我相同的问题,下面是一个示例,说明如何在不使用日历生成的情况下进行操作。 (我确实使用这样的日历,但仅限于特定的红色日子)。
Weekdays from Dec =
Var DaysSinceStart = calculate(DATEDIFF(DATE(2020,12,04),max('MyTable'[Date created]),DAY)*1.0)
Var WeeksSinceStart = DaysSinceStart/7.0
Var LeftOverWeekDays = INT((WeeksSinceStart - int(WeeksSinceStart)) * 7.0 + 0.5)
Var ThisWeekDay = WEEKDAY(max('MyTable'[Date created]),2)
Var SatReductionWeekDaysLeft = if(((ThisWeekDay-LeftOverWeekDays)<0),1,0)
Var SunReductionWeekDaysLeft = if(((ThisWeekDay-LeftOverWeekDays)<-1),1,0)
RETURN INT(WeeksSinceStart)*5 + LeftOverWeekDays - SatReductionWeekDaysLeft - SunReductionWeekDaysLeft
我正在寻找一个公式来计算权力枢纽中两个日期之间 weekdays/business 天的天数。
我在 T-SQL 中使用以下查询
执行相同的操作DATEDIFF(dd, Date1, GETDATE()) - (DATEDIFF(wk, Date1, GETDATE()) * 2) -
CASE WHEN DATEPART(dw, Date1) = 1 THEN 1 ELSE 0 END +
CASE WHEN DATEPART(dw, GETDATE()) = 1 THEN 1 ELSE 0 END END
我正在 PowerPivot 中寻找类似的查询。
首先,您需要创建一个 table 日期。这将帮助您解决这个问题,并使您能够使用许多其他 Time Intelligence Functions。您可以手动创建或使用
CalendarDate | Month Key | Month Name | Quarter Name | Year
-----------------------------------------------------------
1/1/2014 | 1.00 | Jan | Q1 | 2014
1/2/2014 | 1.00 | Jan | Q1 | 2014
...
2/1/2014 | 2.00 | Feb | Q1 | 2014
....
8/1/2014 | 8.00 | Aug | Q3 | 2014
..
9/2/2014 | 9.00 | Sep | Q3 | 2014
..
12/16/2014 | 12.00 | Dec | Q4 | 2014
在您的 Dates Table 中可以创建一个计算列来确定每一天是否是工作日。调用列 IsWeekday
=SWITCH(WEEKDAY([CalendarDate]),7,FALSE(),1,FALSE(),TRUE())
如果星期几是一周中的第 7 天或第 1 天,SWITCH 语句将 return 为假 (Saturday/Sunday)
现在,在包含您的交易的 table 中,您可以创建一个名为“工作日数”的新计算列。这将
=CALCULATE(COUNTA(Dates[IsWeekday]),
DATESBETWEEN(Dates[CalendarDate],
TransactionTable[date1],
TransactionTable[date2]
)
)
这里有两篇我推荐的与此方法相关的文章。
另一种解决方案是使用以下 dax 代码创建一个快速度量列:
WeekDays =
SUMX(
SELECTCOLUMNS(
CALENDAR(min('MyTable'[Time1]), min('MyTable'[Time2])),
"Date", min('MyTable'[Time1]),
"BDay", IF(WEEKDAY([Date],3) < 5, 1, 0)
),
[BDay]
)
我在寻找一种在 Power BI 中计算工作日的算法时遇到了这个问题。我找到的解决方案建立在生成表的基础上(手动或自动)。他们确实工作。但就像最初的问题一样,我希望它只是算术。
所以尽管问题得到了回答,但如果其他人正在寻找与我相同的问题,下面是一个示例,说明如何在不使用日历生成的情况下进行操作。 (我确实使用这样的日历,但仅限于特定的红色日子)。
Weekdays from Dec =
Var DaysSinceStart = calculate(DATEDIFF(DATE(2020,12,04),max('MyTable'[Date created]),DAY)*1.0)
Var WeeksSinceStart = DaysSinceStart/7.0
Var LeftOverWeekDays = INT((WeeksSinceStart - int(WeeksSinceStart)) * 7.0 + 0.5)
Var ThisWeekDay = WEEKDAY(max('MyTable'[Date created]),2)
Var SatReductionWeekDaysLeft = if(((ThisWeekDay-LeftOverWeekDays)<0),1,0)
Var SunReductionWeekDaysLeft = if(((ThisWeekDay-LeftOverWeekDays)<-1),1,0)
RETURN INT(WeeksSinceStart)*5 + LeftOverWeekDays - SatReductionWeekDaysLeft - SunReductionWeekDaysLeft