4-4-5日历方法基于Java8代码

4-4-5 Calendar approach based on Java 8 Code

对于我在 Power BI 中的会计日历,我目前正在尝试实施 4-4-5 approach

我们的日历适用于 4-4-5 周的季度。由于每年只有364天,所以几年后一定有53周的一年。因此,12 月有 6 周而不是 5 周。 不幸的是,仍然没有基于 DAX 的方法。 然而,在另一个 post here 中,我发现了一个 JAVA 代码,它可能确定一年是否有 53 周: calculate number of weeks in a given year

    private static long getNumberOfWeeksInYear(LocalDate date) {
    LocalDate middleOfYear = date.withDayOfMonth(1).withMonth(6);
    return middleOfYear.range(WeekFields.ISO.weekOfWeekBasedYear()).getMaximum();
}

public static void main(String[] args) {
    for (int year = 2000; year < 2400; year++) {
        long numberOfWeeks = getNumberOfWeeksInYear(LocalDate.of(year, 1, 1));
        if (numberOfWeeks != 52) {
            System.out.println(year + " has " + numberOfWeeks + " weeks");
        }
    }
}

你们知道如何将代码翻译成 Dax 吗?

我们的财政日历不是基于公历开始的。 今年从 2019 年 12 月 30 日开始,到 21 年 1 月 3 日结束。今年有 53 周。

我无法帮助 PowerPivotDAX。但我可以告诉您如何使用Excel 公式获取这些信息。

鉴于 A2 中的年份,您可以使用以下公式计算该年第一个 ISO 日历周的星期一:

=DATE($A2,1,1)-WEEKDAY(DATE($A2,1,1),3)+(ISOWEEKNUM(DATE($A2,1,1)-WEEKDAY(DATE($A2,1,1),3))<>1)*7

您可以使用以下公式计算该年最后一个 ISO 日历周的星期日:

=DATE($A2+1,1,1)-WEEKDAY(DATE($A2+1,1,1),3)+(ISOWEEKNUM(DATE($A2+1,1,1)-WEEKDAY(DATE($A2+1,1,1),3))<>1)*7-1

给定 C2 中最后一个 ISO 日历周的星期日,以下公式计算该年的 ISO 周数:

=ISOWEEKNUM($C2)

示例:

如您所见,年份是从 A2 开始向下计算的。计算第一个 ISO 日历周星期一的公式放在 B2 向下。计算最后一个 ISO 日历周的星期日的公式在 C2 向下。而计算那年ISO周数的公式在D2向下。