在 Power BI 中筛选一项度量

Filter about one measure in Power BI

我正在创建一个仪表板来比较我们在数据库上执行的某些负载的性能。仪表板获取有关加载日期、要加载的实体、加载类型、记录数和拒绝数的数据。在仪表板中,您可以 select 检查负载的日期、实体和负载类型。为了能够进行比较,我创建了 KPI:第一个比较第一次加载的拒绝次数与 selected 加载的拒绝次数(selected 那天)和第二个将 selected 加载的拒绝次数与最后一个进行比较。

第一个和最后一个负载的负载数都是由措施创建的。一、计算第一个和最后一个负载:

Primera Carga = CALCULATE(MIN(Rechazos[CARGA]),FILTER(ALL(Rechazos),Rechazos[TIPO_CARGA]==SELECTEDVALUE(Rechazos[TIPO_CARGA]) && Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Rechazos[TIPO_CONTADOR])))

Última Carga = CALCULATE(MAX(Rechazos[CARGA]),FILTER(ALL(Rechazos),Rechazos[TIPO_CARGA]==SELECTEDVALUE(Rechazos[TIPO_CARGA]) && Rechazos[TIPO_CONTADOR] == SELECTEDVALUE(Rechazos[TIPO_CONTADOR])))

'Primera Carga' 代表第一次加载,'Última Carga' 代表最后一次加载。两者都是与执行日期相关的代码,并编纂为“yyyymmdd”。

一旦定义了负载,两者中的拒绝数量...

Nº Rechazos = 
    var valor_codigo_venta = SELECTEDVALUE(CODIGO_VENTA[CODIGO_VENTA])
    RETURN (
        IF(ISBLANK(valor_codigo_venta),
                IF(ISBLANK(SUMX(FILTER(all(Rechazos),Rechazos[CARGA]==SELECTEDVALUE(Rechazos[CARGA])
                                    && Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR]) 
                                    && Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                ),Rechazos[NUM_RECHAZOS])),
                                0,
                                SUMX(FILTER(all(Rechazos),Rechazos[CARGA]==SELECTEDVALUE(Rechazos[CARGA])
                                    && Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR]) 
                                    && Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                ),Rechazos[NUM_RECHAZOS]))
        ,IF(ISBLANK(SUMX(FILTER(all(Rechazos),Rechazos[CARGA]==SELECTEDVALUE(Rechazos[CARGA])
                                    && Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR]) 
                                    && Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                    && Rechazos[CODIGO_VENTA]==valor_codigo_venta
                    ),Rechazos[NUM_RECHAZOS])),0,SUMX(FILTER(all(Rechazos),Rechazos[CARGA]==SELECTEDVALUE(Rechazos[CARGA])
                                    && Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR]) 
                                    && Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                    && Rechazos[CODIGO_VENTA]==valor_codigo_venta
                    ),Rechazos[NUM_RECHAZOS]))
        )
    )

首先,我根据 select 离子计算出拒绝次数。稍后,对于最后一次和第一次加载...

Nº Rechazos Primera = 
    var valor_codigo_venta = SELECTEDVALUE(CODIGO_VENTA[CODIGO_VENTA])
    RETURN(
         IF(ISBLANK(valor_codigo_venta),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), 
                                    Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Primera Carga]**
                        )
                    ),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), 
                                    Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Primera Carga]**
                                &&  Rechazos[CODIGO_VENTA]==SELECTEDVALUE(Rechazos[CODIGO_VENTA])
                        )
                    )
        )
    )

Nº Rechazos Última = 
    var valor_codigo_venta = SELECTEDVALUE(CODIGO_VENTA[CODIGO_VENTA])
    RETURN(
         IF(ISBLANK(valor_codigo_venta),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Última Carga]**
                        )
                    ),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Última Carga]**
                                &&  Rechazos[CODIGO_VENTA]==SELECTEDVALUE(Rechazos[CODIGO_VENTA])
                        )
                    )
        )
    )


现在我想将 selected 负载与之前的负载进行比较。为此,我创建了一个测量值,也为我提供了之前的负载:

Anterior Carga = CALCULATE(MAX(Rechazos[CARGA])
        ,FILTER(ALL(Rechazos)
                ,Rechazos[TIPO_CARGA]==SELECTEDVALUE(Rechazos[TIPO_CARGA]) 
              && Rechazos[TIPO_CONTADOR] == SELECTEDVALUE(Rechazos[TIPO_CONTADOR]) 
              && **Rechazos[FECHA_CARGA]<SELECTEDVALUE(Rechazos[FECHA_CARGA])**
        )
    )

因此,通过此计算,只需更改先前测量之一中的过滤器即可获得我的结果,...

Nº Rechazos Anterior = 
    var valor_codigo_venta = SELECTEDVALUE(CODIGO_VENTA[CODIGO_VENTA])
    RETURN(
         IF(ISBLANK(valor_codigo_venta),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Anterior Carga]**
                        )
                    ),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]==**[Anterior Carga]**
                                &&  Rechazos[CODIGO_VENTA]==valor_codigo_venta
                        )
                    )
        )
    )

如您所见,唯一的区别是粗体代码。但它总是给我 0。如果我引入一个硬编码代码(例如 20200917),它会给我结果。所以我怀疑“Anterior Carga”的措施,具体在粗体代码中。但是我找不到答案。

谁能看出这段代码的问题在哪里?

提前致谢。

我不明白你为什么要执行 ALL(Rechazos) 然后再次应用过滤器,但可能可以通过将最后一次加载保存到变量中来修复你的错误:

Nº Rechazos Anterior = 
    var valor_codigo_venta = SELECTEDVALUE(CODIGO_VENTA[CODIGO_VENTA])
    var anterior_carga = [Anterior Carga]
    RETURN(
         IF(ISBLANK(valor_codigo_venta),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]== anterior_carga
                        )
                    ),
                CALCULATE([Nº Rechazos], 
                        FILTER(all(Rechazos), Rechazos[TIPO_CONTADOR]==SELECTEDVALUE(Tipo_Contador[TIPO_CONTADOR])
                                &&  Rechazos[TIPO_CARGA]==SELECTEDVALUE(TIPO_CARGA[TIPO_CARGA])
                                &&  Rechazos[CARGA]== anterior_carga
                                &&  Rechazos[CODIGO_VENTA]==valor_codigo_venta
                        )
                    )
        )
    )