在Power BI中过滤大约一种度量

时间:2020-10-13 12:09:18

标签: powerbi measure

我正在创建一个仪表板,以比较我们通过数据库执行的某些负载的性能。仪表板获取有关加载日期,要加载的实体,加载类型,记录数和拒绝数的数据。在仪表板上,您可以选择要检查的负载的日期,实体和负载的类型。为了进行比较,我创建了KPI:第一个比较第一个负载的拒绝数量与所选负载(选择的日期)的拒绝数量,第二个比较所选负载的拒绝数量对着最后一个。

第一个和最后一个负载的负载数均由度量创建。首先,计算第一个和最后一个负载:

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'代表首次装载,'ÚltimaCarga'代表最后装载。两者都是与执行日期相关的代码,编码为“ 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]))
        )
    )

首先,我计算出一个度量,根据选择结果给出拒绝的数量。后来,对于最后一次和第一次加载...

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])
                        )
                    )
        )
    )


现在,我想将所选负载与前一个负载进行比较。为此,我创建了一个度量,也给了我以前的负载:

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),它将为我提供结果。因此,我怀疑措施“ 前部腕骨肌”,具体来说以粗体显示。但是我找不到答案。

有人可以看到此代码的问题在哪里吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我不知道为什么要先执行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
                        )
                    )
        )
    )