比较两个动态列表并获取
我有一个表格,展示一组跑者在跑圈时经过不同传感器的情况。并非每一圈都会经过每个传感器,甚至有可能整圈都没有经过传感器。我需要一种方法,在改变所选传感器时,显示未经过任何传感器的圈数。下面的示例中,我希望显示:
当选择了所有传感器时 (Blind laps R1 = 63425, 63426 R2 = 6565 R3 = None):
| 跑者 | 未经过传感器的圈数 |
|---|---|
| R1 | 2 |
| R2 | 1 |
| R3 | 0 |
当切片器移除传感器1 (Blind laps R1 = 63424-63427 R2 = 6565 R3 = 1695,1698)
| 跑者 | 未经过传感器的圈数 |
|---|---|
| R1 | 4 |
| R2 | 1 |
| R3 | 2 |
T1
| 传感器 | 跑者 | 圈 |
|---|---|---|
| Sen1 | R1 | 63424 |
| Sen2 | R2 | 6564 |
| Sen1 | R3 | 1695 |
| Sen1 | R2 | 6564 |
| Sen2 | R3 | 1696 |
| Sen2 | R3 | 1697 |
| Sen2 | R2 | 6566 |
| Sen2 | R3 | 1698 |
| Sen1 | R1 | 63427 |
| Sen1 | R3 | 1698 |
正如你所见,跑者的圈数可能差异很大。当我在Excel中实现时,我会为每位跑者生成一个从最小圈数到最大圈数的序列,然后检查序列中是否有不在筛选后的圈列中的数字存在;但这种方法似乎很难直接转化为DAX。我在度量中没有报错,但把它放到表格可视化中时,会返回错误:GenerateSeries函数的参数不能为空。
我的尝试
0_Blind_Laps =
VAR Run= SELECTEDVALUE('T1'[Runner])
VAR All_laps =
COUNTROWS(
GENERATESERIES(
MINX(
FILTER(ALLSELECTED('T1'),'T1'[Runner] = Run),'T1'[Lap]),
MAXX(
FILTER(ALLSELECTED('T1'),'T1'[Runner] = Run),'T1'[Lap])
)
)
VAR Count_Laps =
CALCULATE(
DISTINCTCOUNT('T1'[Lap]),'T1'[Runner]=Run)
RETURN
All_laps-Count_Laps
解决方案
Copilot给我提供了解决方案,虽然我仍不完全理解为什么MinX/MaxX函数会返回空值,但把函数用更多变量拆分后解决了这个问题。
0_Blind_Laps =
VAR Run = SELECTEDVALUE('T1'[Runner])
VAR LapTable =
FILTER(
ALLSELECTED('T1'),
'T1'[Runner] = Run
)
VAR MinLap = MINX(LapTable, 'T1'[Lap])
VAR MaxLap = MAXX(LapTable, 'T1'[Lap])
VAR All_Laps =
IF(
NOT ISBLANK(MinLap) && NOT ISBLANK(MaxLap),
COUNTROWS(GENERATESERIES(MinLap, MaxLap)),
BLANK()
)
VAR Count_Laps =
CALCULATE(
DISTINCTCOUNT('T1'[Lap]),
'T1'[Runner] = Run
)
RETURN
All_Laps - Count_Lapss
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。