缺口/孤岛问题,连续天数标记为重置

Gap/Island problem, consecutive days flagged with reset

提问人:bigjdawg43 提问时间:11/4/2023 更新时间:11/6/2023 访问量:69

问:

希望在此论坛上从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 日。

我不确定从哪里开始,所以非常感谢任何帮助。 非常感谢。

间隙和孤岛PowerBI Gaps-and-Islands

评论

0赞 bigjdawg43 11/4/2023
道歉。我试图提供实际数据集的更小版本。最重要的是,我正在尝试计算特定帐户的 Flag = 1 的连续天数。因此,在示例中,您可以看到对于帐户 ABC,1/3、1/4 和 1/5 上的 Flag=1。在那些日子里,对于该帐户,目标结果将为 1 (1/3)、2 (1/4) 和 3 (1/5)。例如,这与 DEF 不同,后者在 1/4 上有 Flag=0。因此,该帐户当天的目标结果将为 0。但在 1/5 上,目标结果 = 1,因为 Flag=1 在 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
棒。非常感谢您的帮助。