首页 > 解决方案 > 4-4-5 基于 Java 8 代码的日历方法

问题描述

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

我们的日历适用于 4-4-5 周的季度。由于每年只有 364 天,因此几年后必须有 53 周的年份。因此,12 月有 6 周而不是 5 周。不幸的是,仍然没有基于 DAX 的方法。然而,在这里的另一篇文章中,我发现了一个 JAVA 代码,它可能确定一年是否有 53 周: 计算给定年份的周数

    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 吗?

我们的财政日历不是基于公历开始的。今年从 30.12.19 开始,到 03.01.21 结束。今年有 53 周。

标签: javaexcelpowerbidaxpowerpivot

解决方案


我无能为力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

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

=ISOWEEKNUM($C2)

例子:

在此处输入图像描述

如您所见,这些年是从A2下往上的。计算第一个日历周的星期一的公式向下ISO放置。B2计算上一个ISO日历周的星期日的公式是C2向下的。计算当年ISO周数的公式是D2向下的。


推荐阅读