Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

Problema con el DAX

requisito:

El visual del lado izquierdo es lo que obtenemos de forma predeterminada en PBI
lo que necesito es un objeto visual del lado derecho, pero los valores de todas las regiones no deben ser 0,31 sino
APAC - 1

Europa - 0,5

la - 0.5

afracia - 1

Australia - 1

en - 1

Emiratos Árabes Unidos - 0

Solo APAC, Europa y LA tienen numerador y denominador, por lo que debe dar valores respectivos

Los Emiratos Árabes Unidos solo tienen denominador, por lo que es 0 (0 / cualquier cosa)

rest regions no tiene datos, por lo que debe dar el valor como 1

-----------------------------------------------------------------------------------------------------------------------

Dax:

DAX predeterminado = CALCULAR(CONTAR('Tasa S'[éxito]),'Tasa S'[bandera de inclusión]="Y")/CONTAR('Tasa S'[éxito])
DAX modificado = CALCULAR(CALCULAR(CONTAR('Tasa S'[éxito]),'Tasa S'[bandera de inclusión]="Y")/CONTAR('Tasa S'[éxito]),FILTRO CRUZADO(región[región],'Tasa S'[región],Ninguno))
nota:
necesita DISTINCTCOUNT en el escenario real, por ejemplo, he escrito solo COUNT
sería muy útil replicar el escenario con DISTINCTCOUNT
-----------------------------------------------------------------------------------------------------------------------
Mesas:
Tasa S
MkregiónBandera de inclusiónéxito
1APACy95
1Europan85
1lay91
1enn97
1Áfrican88
1Australian95
1APACy93
2Europay94
2lan89
2enn88
2Áfrican99
2Australian80
2Uaen90

región

región
APAC
Europa
la
en
África
Australia
Uae

mes

Mkm
1Nov
2dic

9 Replies

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      como dije anteriormente, el eje x tiene 2 campos, el 1er mes y luego la 2ra región

      mi dax predeterminado es CALCULATE(COUNT('S rate'[success]),'S rate'[inclusion flag]="Y")/COUNT('S rate'[success])

      Por lo tanto, de forma predeterminada, los datos se dividirán por mes en el primer nivel y se dividirán por región en el segundo nivel

      Y ahora mi negocio tiene un requisito por encima de esta lógica,

      Quieren ver todas las regiones disponibles para todos los meses

      para. Por ejemplo, el mes de noviembre tiene datos solo para la región APAC, Australia y LA

      También necesitan ver otra región si el numerador y el denominador no están disponibles (o están en blanco), entonces deberían mostrar 100% o 1 y si el numerador no está disponible, debería mostrar 0 (0 por cualquier cosa es 0)

      este es el resultado que necesito obtener

      Emiratos Árabes Unidos - 0

      APAC - 1

      Europa - 0,5

      la - 0.5

      afracia - 1

      Australia - 1

      en - 1

      -----------------------------------------------------------------------------------------------------------------------

      DAX modificado = CALCULATE(CALCULATE(COUNT('S rate'[success]),'S rate'[inclusion flag]="Y")/COUNT('S rate'[success]),FILTRO CRUZADO(región[región],'S rate'[región],Ninguno))

      esta es la lógica que escribí para obtener cada región en menos de un mes, obtuve las regiones con esta lógica, pero para cada región obtengo los mismos valores que ese mes

  • Hola @animebuff,

    Creo que la siguiente medida debería darte lo que necesitas:

    ratio = 
    VAR _numerator = CALCULATE(COUNT('S rate'[success]),'S rate'[inclusion flag]="Y")
    VAR _denominator = COUNT('S rate'[success])
    VAR _result = 
    SWITCH(
        TRUE(),
        ISBLANK(_denominator), 1,
        ISBLANK(_numerator), 0,
        DIVIDE(_numerator, _denominator)
    )
    RETURN _result

    Ese es el resultado:

    Si no me estoy perdiendo nada, parece que hay denominadores para África, Australia, NA y Emiratos Árabes Unidos, por eso obtenemos ceros en el gráfico (al menos esta parte de su fórmula que se refiere al denominador devuelve el resultado: COUNT('S rate'[success]) )

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      si intento ISBLANK(num) && ISBLANK(den),1 como una condición de la declaración switch que es mi pregunta real

      luego obtengo 1 para los meses que ni siquiera tienen datos, por ejemplo, si mis columnas mensuales tienen un mes adicional como el 25 de enero, incluso si no hay datos, todavía obtendré 1 por lógica

      Eso estará mal, ¿verdad?

      Esta lógica funciona cuando en Mi región se profundiza, pero durante el mes mostrará valores incorrectos

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Hola @animebuff , no estoy seguro de lo que quieres decir exactamente, pero estoy bastante seguro de que esto se puede resolver fácilmente. ¿Puede proporcionar una muestra de datos que incluya el caso con un mes adicional?

  • Hola @animebuff

    Aquí hay 2 soluciones alternativas:

    1:

    Utilice el dax predeterminado:

    Measure = 
    CALCULATE ( COUNT ( 'S rate'[success] ), 'S rate'[inclusion flag] = "Y" )
        / COUNT ( 'S rate'[success] )

    A continuación, haga clic con el botón derecho en el campo [región] en el eje X y seleccione Mostrar elementos sin datos:

    El resultado es el siguiente:

    2:

    Cambie la medida de la siguiente manera:

    Measure 2 = 
    VAR _AAA = CALCULATE ( COUNT ( 'S rate'[success] ), 'S rate'[inclusion flag] = "Y" )
        / COUNT ( 'S rate'[success] )
    RETURN 
    IF(_AAA<>0,_AAA,0)

    El resultado es el siguiente:

    Saludos

    Zhengdong Xu
    Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Ambos métodos mostrarán los datos como 0 para los meses que no tienen la clave de sustituto de fecha en la tabla de hechos

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Hola @wini_R

        Por favor, pruebe esta medida:

        MEASURE =
        VAR _currentRegion =
            SELECTEDVALUE ( 's rate'[region] )
        VAR _ifdenominator =
            COUNTROWS (
                SUMMARIZE (
                    FILTER (
                        ALLSELECTED ( 's rate' ),
                        's rate'[region] = _currentRegion
                            && 's rate'[inclusion flag] = "n"
                    ),
                    's rate'[mk],
                    's rate'[region]
                )
            )
        VAR _outcome =
            CALCULATE ( COUNT ( 'S rate'[success] ), 'S rate'[inclusion flag] = "Y" )
                / COUNT ( 'S rate'[success] )
        RETURN
            IF ( _outcome <> BLANK (), _outcome, IF ( _ifdenominator <> 1, 1, 0 ) )
        

        El resultado es el siguiente:

        Saludos

        Zhengdong Xu
        Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.