Powerbi 使用ISO日历的当前会计周
我已经在我的Power BI数据模型中实现了一个财政日历一段时间了。 该会计日历每个月都有一个特定的开始和结束日期,主要基于ISO 8601日历(公历)。 然而,我目前的方法在今年不再有效,因为过滤器“当前财政周”不起作用。如果我根据当前财政周进行筛选,则得到的是一月的第二周,而不是第一周。 但是为什么呢? 我的代码具有以下结构:Powerbi 使用ISO日历的当前会计周,powerbi,dax,Powerbi,Dax,我已经在我的Power BI数据模型中实现了一个财政日历一段时间了。 该会计日历每个月都有一个特定的开始和结束日期,主要基于ISO 8601日历(公历)。 然而,我目前的方法在今年不再有效,因为过滤器“当前财政周”不起作用。如果我根据当前财政周进行筛选,则得到的是一月的第二周,而不是第一周。 但是为什么呢? 我的代码具有以下结构: Calendar = VAR BaseCalendar = CALENDAR ( DATE ( 2020, 1, 1 ), D
Calendar =
VAR BaseCalendar =
CALENDAR (
DATE ( 2020, 1, 1 ),
DATE ( 2022, 01, 03 )
)
RETURN
GENERATE (
BaseCalendar,
VAR BaseDate = [Date]
VAR WeekNumber =
WEEKNUM ( BaseDate )
VAR Year =
YEAR ( BaseDate )
VAR FiscalWeek =
WEEKNUM (
BaseDate,
21
)
VAR FiscalYear =
IF (
FiscalWeek < 5
&& WeekNumber > 50,
Year + 1,
IF (
FiscalWeek > 50
&& WeekNumber < 5,
Year - 1,
Year
)
)
RETURN
ROW (
"Fiscal Week", FiscalWeek,
"Current Fiscal Week",
IF (
AND (
FiscalWeek
= WEEKNUM (
TODAY (),
2
),
FiscalYear
= YEAR (
TODAY ()
)
),
TRUE (),
FALSE ()
)
)
)
日历=
基准日历=
历法(
日期(2020年1月1日),
日期(2022年1月3日)
)
返回
产生(
基准日历,
VAR BaseDate=[日期]
变量周数=
周数(基准日期)
风险年=
年份(基准日期)
财政周刊=
周数(
基准日期,
21
)
财政变种=
如果(
财政周<5
&&周数>50,
年+1,
如果(
财政周>50
&&周数<5,
第一年,
年
)
)
返回
划船(
“财政周”,财政周,
“当前财政周”,
如果(
及(
财政周
=周数(
今日(,
2.
),
财政部
=年(
今天()
)
),
TRUE(),
假()
)
)
)
我认为当前财政周应使用与计算财政周
和财政周
相同的公式。我将新变量的变量定义放在GENERATE
之外,因为它们只依赖于今天()
VAR TodayBaseDate=
今日()
VAR TodayWeekNumber=
周数(今日基准日)
今日价值=
年份(今日基准日)
今日财政周=
周数(今日基准日,21)
今日财政年度=
如果(
今天的财政周<5
&&今天周末的人数>50,
今天+1,
如果(今天的财政周>50&&TodayWeekNumber<5,今天的年份-1,今天的年份)
)
基准日历=
日历(日期(2020年1月1日),日期(2022年1月3日))
返回
产生(
基准日历,
VAR BaseDate=[日期]
变量周数=
周数(基准日期)
风险年=
年份(基准日期)
财政周刊=
周数(基准日,21)
财政变种=
如果(
财政周<5
&&周数>50,
年+1,
如果(财政周>50和周数<5,年份-1,年份)
)
返回
划船(
“周日”,格式([日期],“ddd”),
“今天”,今天(),
“财政周”,财政周,
“当前财政周”,
和(FiscalWeek=今日FiscalWeek,FiscalYear=今日FiscalYear)
)
)
太好了,它工作得非常好!为什么要为GENERATE设置变量?这会影响DAX性能吗?或者这对于概述来说更容易吗?这两个原因,主要是代码可读性:)
VAR TodayBaseDate =
TODAY()
VAR TodayWeekNumber =
WEEKNUM( TodayBaseDate )
VAR TodayYear =
YEAR( TodayBaseDate )
VAR TodayFiscalWeek =
WEEKNUM( TodayBaseDate, 21 )
VAR TodayFiscalYear =
IF(
TodayFiscalWeek < 5
&& TodayWeekNumber > 50,
TodayYear + 1,
IF( TodayFiscalWeek > 50 && TodayWeekNumber < 5, TodayYear - 1, TodayYear )
)
VAR BaseCalendar =
CALENDAR( DATE( 2020, 1, 1 ), DATE( 2022, 01, 03 ) )
RETURN
GENERATE(
BaseCalendar,
VAR BaseDate = [Date]
VAR WeekNumber =
WEEKNUM( BaseDate )
VAR Year =
YEAR( BaseDate )
VAR FiscalWeek =
WEEKNUM( BaseDate, 21 )
VAR FiscalYear =
IF(
FiscalWeek < 5
&& WeekNumber > 50,
Year + 1,
IF( FiscalWeek > 50 && WeekNumber < 5, Year - 1, Year )
)
RETURN
ROW(
"Week day", FORMAT( [Date], "ddd" ),
"Today", TODAY(),
"Fiscal Week", FiscalWeek,
"Current Fiscal Week",
AND( FiscalWeek = TodayFiscalWeek, FiscalYear = TodayFiscalYear )
)
)