ISO 周数 - M 脚本

问题描述 投票:0回答:1

我在 Power Query 中使用以下查询来创建 ISO 周数:

#"Inserted ISO Week Number" = Table.AddColumn(#"Inserted End of Week", "ISO Week Number", each 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))

问题是生成的周数只有一位,而我想有两位数的周数格式。 例如:01、02、03 ...等。
在此先感谢您的帮助。

excel powerquery m
1个回答
1
投票

你可以像这样包装你的答案

= Text.PadStart( Text.From( [ISO Week Number] ), 2, "0" )

比如你原来的配方

#"Inserted ISO Week Number" = Table.AddColumn(Source, "ISO Week Number", each Text.PadStart( Text.From(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) ), 2, "0" ))

或更紧凑

#"Inserted ISO Week Number" = Table.AddColumn(Source, "ISO Week Number", each Text.PadStart( Text.From(Number.IntegerDivide(Number.Mod(Number.Mod(28*Number.Mod(Number.IntegerDivide((Number.From([Date]) + 692501) / 7, 1),20871 ) + 4383,146096),1461)/28,1)+1 ), 2, "0" ))

或使用函数

#"Inserted ISO Week Number" = Table.AddColumn(#"Changed Type", "ISO Week Number", each iso([Date]))

功能

(theDate as date) =>
// http://gorilla.bi/power-query/create-iso-week-and-iso-year/ Rick Rothstein
let IWN =  Text.PadStart( Text.From(Number.IntegerDivide(Number.Mod(Number.Mod(28*Number.Mod(Number.IntegerDivide((Number.From(theDate) + 692501) / 7, 1),20871 ) + 4383,146096),1461)/28,1)+1 ), 2, "0" ) in  IWN

注意这会将您的数字周转换为文本字段

© www.soinside.com 2019 - 2024. All rights reserved.