If statement 使用两个不同日期范围的If-then语句
在Power BI中,我使用的是一个句点表,它应用步骤获取今天的日期,设置范围,将范围转换为一个表,然后在Power查询中设置输出。一切都按预期进行,但重点是在范围步骤 这是原样:If statement 使用两个不同日期范围的If-then语句,if-statement,powerbi,powerquery,m,If Statement,Powerbi,Powerquery,M,在Power BI中,我使用的是一个句点表,它应用步骤获取今天的日期,设置范围,将范围转换为一个表,然后在Power查询中设置输出。一切都按预期进行,但重点是在范围步骤 这是原样: = { {"Day", Date.AddDays(TodaysDate,-1), Date.AddDays(TodaysDate,-1), 1},
= {
{"Day",
Date.AddDays(TodaysDate,-1),
Date.AddDays(TodaysDate,-1),
1},
{"Week to Date",
Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)),
Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , +6),
2},
{"Week",
Date.AddWeeks( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1),
Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1),
....
以下是示例输出:
然而,我想要的是,如果今天等于星期一,那么只显示星期五的日期。
以下是我的尝试:
= {
{"Day",
if Date.DayofWeek(TodaysDate) = 1
then
[
Date.AddDays(TodaysDate,-3),
Date.AddDays(TodaysDate,-3),
]
else
[
Date.AddDays(TodaysDate,-1),
Date.AddDays(TodaysDate,-1),
] ....
请注意,“天”是“昨天”。
我正在努力做到这一点,这样人们就可以看到前一天的生产工作,而周一的前一天是周五
以下是全部代码:
let
TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
Ranges = {
{"Day",
Date.AddDays(TodaysDate,-1),
Date.AddDays(TodaysDate,-1),
1},
{"Week to Date",
Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)),
Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , +6),
2},
{"Week",
Date.AddWeeks( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1),
Date.AddDays( Date.From(Date.StartOfWeek(TodaysDate,Day.Thursday)) , -1),
3},
{"Month To Date",
Date.From(Date.StartOfMonth(TodaysDate)),
TodaysDate,
4},
{"Month",
Date.AddMonths(Date.From(Date.StartOfMonth(TodaysDate)),-1),
Date.AddMonths(Date.From(Date.EndOfMonth(TodaysDate)),-1),
5},
{"Rolling 13Wks",
Date.AddWeeks(TodaysDate,-13) + #duration(1,0,0,0),
TodaysDate,
6},
{"Year To Date",
Date.From(Date.StartOfYear(TodaysDate)),
TodaysDate,
7}
},
GetTables = List.Transform(Ranges,
each CreatePeriodTable(_{0}, _{1}, _{2}, _{3})),
Output = Table.Combine(GetTables),
#"Filtered Rows" = Table.SelectRows(Output, each true)
in
#"Filtered Rows"
我认为最简单的方法是为前一天创建一个变量:
let
TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
PrevWorkDate = if Date.DayOfWeek(TodaysDate) = 1
then Date.AddDays(TodaysDate,-3)
else Date.AddDays(TodaysDate,-1),
Ranges = {
{"Day",
PrevWorkDate,
PrevWorkDate,
1},
[...etc...]
否则,您可能可以执行以下操作:
let
TodaysDate = Date.From(DateTimeZone.FixedUtcNow()),
Ranges = {
if Date.DayOfWeek(TodaysDate) = 1
then
{"Day",
Date.AddDays(TodaysDate,-3),
Date.AddDays(TodaysDate,-3),
1}
else
{"Day",
Date.AddDays(TodaysDate,-1),
Date.AddDays(TodaysDate,-1),
1},
我在任何地方都看不到问题。你到底遇到了什么问题?我试图做一个if语句,但它是错误的。我不知道power查询中的正确语法,无法为“如果今天是星期一,那么日期将是星期五,否则日期将是今天-1”执行if语句。我如何使上述尝试起作用?您希望结果是什么样子,为什么要写两次?假设今天是19年5月20日星期一。我想显示的“一天”是5/17/19,因为那是最后一个工作日。我在顶部添加了整个代码,但是需要一个“范围”来避免错误。我仍然不知道您希望最终的表是什么样子。与您的屏幕截图相同的格式?