Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

RowCount con varias condiciones

Entiendo cómo contar la lectura, la escritura y las matemáticas si se almacenaran en columnas, con una declaración básica de si.

Estoy luchando por desentrañar el dax para contar filas cruzadas con múltiples condiciones. Realmente no sé cuál es la termonología para buscar la respuesta de manera efectiva.

Apreciaría cualquier apoyo con la respuesta y también la documentación que discute esto más a fondo para que pueda entenderlo.

Para lectura, escritura y matemáticas.

  • Recuento de nota donde es GDS para asignaturas. - ejemplo de respuesta will = 1
  • Recuento de nota donde es EXP o GDS para todas las asignaturas. - ejemplo de respuesta will = 2

https://1drv.ms/u/s!AmEktzChYLvAtADTKsDaqceW532Z?e=rpeLtL

gracias

3 Replies

  • Hola @ConnollyZ
    Aquí está el archivo de ejemplo con la solución https://www.dropbox.com/t/jYYoXx4gjMHPYC9V

    GDS Only = 
    SUMX (
        VALUES ( Grades[Name] ),
        VAR CurrentNameGrades = 
            CALCULATETABLE ( VALUES ( Grades[Grade] ), ALLEXCEPT ( Grades, Grades[Name] ) )
        RETURN
            IF ( 
                COUNTROWS ( EXCEPT ( CurrentNameGrades, { "GDS" } ) ) = 0,
                1
            )
    )
    EXP or GDS = 
    SUMX (
        VALUES ( Grades[Name] ),
        VAR CurrentNameGrades = 
        CALCULATETABLE ( VALUES ( Grades[Grade] ), ALLEXCEPT ( Grades, Grades[Name] ) )
        RETURN
            IF ( 
                COUNTROWS ( EXCEPT ( CurrentNameGrades, { "EXP", "GDS" } ) ) = 0,
                1
            )
    )
  • ¡Gracias por esto! Viendo la solución no la habría resuelto.

    ¿Podría ofrecer una explicación de cómo funciona el dax, por favor?

    gracias de nuevo.

  • @ConnollyZ
    El primer de todo el tema es contar el número de nombres que cumplen con las condiciones dadas. VALUES proporciona una tabla de una columna que contiene los distintos valores de Names y que es la grandurabilidad requerida para empezar. Esta es la tabla que necesitamos filtrar y luego contar sus filas. Hay dos formas posibles de hacerlo: ya sea usando FILTER y envuélvelo con COUNTROWS o usando SUMX para contar usando el método simple IF TRUE then 1 De lo contrario, no haga nada (como un contador) y este es el método que seguí.
    En ambos casos, se requiere iteración para corregir la tabla de granularidad. Luego, usando CALCULATETABLE estamos creando un contexto de filtro que recupera los VALORES de Grado asociados con cada nombre. ALLEXCEPT es un modificador CALCULATE/CALCULATETABLE que se asegura de que al crear este nuevo contexto de filtro se eliminen todos los filtros de todas las columnas que no sean "Nombre" (por ejemplo, en la tabla de su ejemplo tenemos un filtro que viene de la columna "Grade" en sí y este filtro afectará los resultados y deberá eliminarse. En el caso de la tarjeta visual eso no hará ninguna diferencia ya que no hay un contexto de filtro existente en las tarjetas).
    Ahora podemos obtener una tabla de todos los Grados asociados con el Nombre actual bajo iteración que solo necesitamos comparar con nuestra tabla de condiciones. Elegí la función EXCEPTO para esta tarea para comprobar: si los valores de condición se eliminan de la tabla calculada, ¿queda algo más dentro de ella? Si no es así (COUNTROWS de la tabla resultante es 0), cuente 1. A continuación, vaya al siguiente nombre y repita..