提问人:bigjdawg43 提问时间:11/4/2023 更新时间:11/6/2023 访问量:69
缺口/孤岛问题,连续天数标记为重置
Gap/Island problem, consecutive days flagged with reset
问:
希望在此论坛上从Power BI专家那里获得一些帮助。我有一个数据表,我正在尝试获取 Power BI 中的“目标结果”列。
日期 | 帐户 | 旗 | 目标结果 |
---|---|---|---|
1/3/23 | 美国广播公司 | 1 | 1 |
1/3/23 | DEF的 | 1 | 1 |
1/3/23 | GHI公司 | 1 | 1 |
1/3/23 | JKL公司 | 1 | 1 |
1/4/23 | 美国广播公司 | 1 | 2 |
1/4/23 | DEF的 | 0 | 0 |
1/4/23 | GHI公司 | 0 | 0 |
1/4/23 | JKL公司 | 1 | 2 |
1/5/23 | 美国广播公司 | 1 | 3 |
1/5/23 | DEF的 | 1 | 1 |
1/4/23 | GHI公司 | 0 | 0 |
1/4/23 | JKL公司 | 1 | 3 |
通过谷歌搜索,我相信这是一个标准的间隙和孤岛类型问题,但是,鉴于我对 DAX 并不擅长,我似乎无法调整我发现的适用于我的用例的内容。
从表中可以看出,这个想法是,“目标结果”列将计算特定帐户的 Flag = 1 的连续天数,但如果帐户的 Flag 列重置为 0,则重置为 0。例如,账户 ABC 在 23 年 1 月 5 日显示 3,因为每天的 Flag = 1,但 DEF 在同一天显示 1,因为该账户在 23 年 1 月 4 日的 Flag = 0,当 Flag = 1 时,目标结果 = 1 在 23 年 1 月 5 日。
我不确定从哪里开始,所以非常感谢任何帮助。 非常感谢。
答:
1赞
Sam Nseir
11/4/2023
#1
尝试:
Target Result =
var curD = [Date]
var curA = [Account]
var lastReset = CALCULATE(MAX([Date]), ALL('Gap'), 'Gap'[Account] = curA && 'Gap'[Date] <= curD && 'Gap'[Flag] = 0)
var result = CALCULATE(COUNTROWS('Gap'), ALL('Gap'), 'Gap'[Account] = curA && 'Gap'[Date] > lastReset && 'Gap'[Date] <= curD)
RETURN COALESCE(result, 0)
在下面添加了 v2,查看从今天开始的最后 7 天。
Target Result v2 =
var curD = [Date]
var curA = [Account]
var ageDays = TODAY() - 6 // 7 days
var filterSet = FILTER(ALL('Gap'), 'Gap'[Account] = curA && 'Gap'[Date] >= ageDays)
var lastReset = CALCULATE(MAX([Date]), filterSet, 'Gap'[Date] <= curD && 'Gap'[Flag] = 0)
var result = CALCULATE(COUNTROWS('Gap'), filterSet, 'Gap'[Date] > lastReset && 'Gap'[Date] <= curD)
RETURN IF(curD >= ageDays, COALESCE(result, 0) )
评论
0赞
bigjdawg43
11/4/2023
还有一个问题...如果我想调整上述内容,使其仅考虑过去 10 天(而不是整个生产时间序列),我会将 var curD = [Date] 转换为 var curD = [Date]-10 吗?再次感谢
0赞
Sam Nseir
11/4/2023
每个条目的最后 10 天还是今天?你只是想让最大值是 10 吗?
0赞
bigjdawg43
11/4/2023
我想我正在寻找你提到的第二种选择。最后 7 天实际上可能会让我在概念上更容易。因此,例如,不要查看整个数据集,而是只查看 10/27/23-11/3/23。
0赞
Sam Nseir
11/6/2023
使用 v2 更新了上面的答案以查看过去 7 天的情况。
0赞
bigjdawg43
11/6/2023
棒。非常感谢您的帮助。
上一个:连续缺勤的学生(不包括假期)
下一个:计算 7 天内的活跃用户数
评论