比较两个动态列表并获取

编程语言 2026-07-10

我有一个表格,展示一组跑者在跑圈时经过不同传感器的情况。并非每一圈都会经过每个传感器,甚至有可能整圈都没有经过传感器。我需要一种方法,在改变所选传感器时,显示未经过任何传感器的圈数。下面的示例中,我希望显示:

当选择了所有传感器时 (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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章