首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电力查询-会计月度起止日期

电力查询-会计月度起止日期
EN

Stack Overflow用户
提问于 2021-02-25 17:00:13
回答 1查看 183关注 0票数 0

我正在紧锣密鼓地研究在Power Query中生成的会计日历。我最后的挑战之一是确定开始日期和结束日期以及天数对于我们的财政月份。结构是这样的:

代码语言:javascript
运行
复制
Date    Fiscal Month    Fiscal Year
28.12.2020  December    2020
29.12.2020  December    2020
30.12.2020  December    2020
31.12.2020  December    2020
01.01.2021  December    2020
02.01.2021  December    2020
03.01.2021  December    2020
04.01.2021  January     2021
05.01.2021  January     2021
06.01.2021  January     2021
07.01.2021  January     2021
08.01.2021  January     2021
09.01.2021  January     2021

如何在power查询中确定此信息?

编辑:添加会计周计算:

代码语言:javascript
运行
复制
if Number.RoundDown((Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7) = 0 then
    Number.RoundDown((Date.DayOfYear(#date(Date.Year([Date]) - 1, 12, 31)) - (Date.DayOfWeek(#date(Date.Year([Date]) - 1, 12, 31), Day.Monday) + 1) + 10) / 7)
   else if (Number.RoundDown((Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7) = 53 and (Date.DayOfWeek(#date(Date.Year([Date]), 12, 31), Day.Monday) + 1 < 4)) then
    1
   else
    Number.RoundDown((Date.DayOfYear([Date]) - (Date.DayOfWeek([Date], Day.Monday) + 1) + 10) / 7)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 18:01:16

假设新的会计年度从第一个星期一开始,那么您可以使用Date.WeekOfYearDate.DayOfWeek函数在启动时进行检查。所以对于Fiscal Year可能是:

代码语言:javascript
运行
复制
if (Date.WeekOfYear([Date]) > 1
    or Date.DayOfWeek(#date(Date.Year([Date]), 1, 1), Day.Monday) = 0) then   
    Date.Year([Date])
else
    Date.Year([Date]) - 1

类似地,Fiscal Month将是:

代码语言:javascript
运行
复制
if (Date.WeekOfYear([Date]) > 1
    or Date.DayOfWeek(#date(Date.Year([Date]), 1, 1), Day.Monday) = 0) then   
    Date.MonthName([Date])
else
    Date.MonthName(Date.AddMonths([Date], -1))

会计年度的开始日期可以根据1月1日的星期几来计算:

代码语言:js
复制
#date([Fiscal Year], 1, Number.Mod(7 - Date.DayOfWeek(#date([Fiscal Year], 1, 1), Day.Monday), 7) + 1)

会计年度的结束日期是下一个会计年度开始的前一天:

代码语言:js
复制
Date.AddDays(#date([Fiscal Year] + 1, 1, Number.Mod(7 - Date.DayOfWeek(#date([Fiscal Year] + 1, 1, 1), Day.Monday), 7) + 1), -1)

并且可以根据当前日期和开始日期的差值来计算天数:

代码语言:js
复制
Duration.Days([Date] - [Fiscal Year Start Date]) + 1

如果Week Number是带有会计周编号的列的名称,那么会计月份的日期可以这样计算:

代码语言:javascript
运行
复制
if [Week Number] <= 4 then [Day number]
else if [Week Number] <= 8 then [Day number] - 28
else if [Week Number] <= 13 then [Day number] - 56
else if [Week Number] <= 17 then [Day number] - 91
else if [Week Number] <= 21 then [Day number] - 119
else if [Week Number] <= 26 then [Day number] - 147
else if [Week Number] <= 30 then [Day number] - 182
else if [Week Number] <= 34 then [Day number] - 210
else if [Week Number] <= 39 then [Day number] - 238
else if [Week Number] <= 43 then [Day number] - 273
else if [Week Number] <= 47 then [Day number] - 301
else [Day number] - 329

第53周将分配给最后一个月。

我猜您将使用这些自定义列来构建日历表。您还需要一个数字会计月份,以便您可以正确排序月份。它与Fiscal Month,但使用Date.Month而不是Date.MonthName在里面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66365332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档