Publicado el Deja un comentario

CONTAR.SI en DAX : Contar la Cantidad de Elementos que Aparecen Usando una Columna Calculada en Power Pivot

Puede que te encuentres en el siguiente desafió:

Debes contar la cantidad de veces que aparece un código en una columna. Resolver esto es sencillo en Excel, usando la función CONTAR.SI(‘columna’,’condición’)

Códigostatusconteofunction
123activo2=CONTAR.SI([Código],C4)
123apagado2=CONTAR.SI([Código],C5)
234null2=CONTAR.SI([Código],C6)
234apagado2=CONTAR.SI([Código],C7)
345null1=CONTAR.SI([Código],C8)
456activo2=CONTAR.SI([Código],C9)
456apagado2=CONTAR.SI([Código],C10)
678null1=CONTAR.SI([Código],C11)
789apagado1=CONTAR.SI([Código],C12)
890apagado1=CONTAR.SI([Código],C13)
987null1=CONTAR.SI([Código],C14)
654apagado1=CONTAR.SI([Código],C15)
Tabla ejemp

En la tabla de ejemplo, puedes verificar que la fórmula en este caso va iterando en cada celda usando como rango la columna [Código] y buscando el argumento de cada celda que se le pasa como condición.

Ten en mente lo que se expone sobre iteración, porque es el principio clave para entender la formula en DAX.

La lógica antes expuesta es la que usaremos para desarrollar la columna calcula, que igual que contar.si deberá devolver la cantidad de veces que aparece el [Código]. La medida podría escribirse de la siguiente forma.

CONTEO:=
VAR CONTEO=CALCULATE(COUNT(ejempl[Código]))
VAR COD=ejempl[Código]

RETURN 

SUMX(
	FILTER(ejempl,
			ejempl[Código]=COD),
	       CONTEO
	)
CONTAR.SI EN DAX

En las dos variables que se utilizan se integra lo que en DAX se conoce como el contexto de fila, el mismo se genera de manera automática cada vez que creamos una columna calculada.

VAR CONTEO=CALCULATE(COUNT(ejempl[Código]) : va a contar la cantidad de códigos que aparece en la columna [Código] lo cierto es que si solo usaras COUNT sin CALCULATE estarías sometido al contexto de fila automático. La manera de modificar ese contexto es usando CALCULATE.

VAR COD=ejempl[Código] : en esta variable se va a definir el contexto de fila de cada aparición de un elemento en la columna [Código]

Por último usamos un SUMX para que itere sobre el contexto modificado de las variables.

SUMX(

                FILTER(ejempl,

                                               ejempl[Código]=COD),

                CONTEO

                )

Si lees la medida desde la parte interna de la misma, notaras que FILTER devuelve una tabla cuyos valores se limitaran a cumplir la condición de: si el contexto actual es igual al contexto anterior suma las apariciones.

Algo como decir en Excel que si A2(ACTUAL)=A1(ANTERIOR) entonces suma el conteo.

El SUMX al final va iterando sobre cada tabla que va generando FILTER (también es una función de iteración) pero lo importante es que el contexto ha sido previamente modificado usando las variables.

La medida anterior se puede aplicar desde la versión 2016 de OFFICE. En caso estuvieras usando una versión anterior, usa la siguiente medida modificada.

CONTEOV2:=CALCULATE(
	COUNT(ejempl[Código]),
		FILTER(ejempl, 
			ejempl[Código]=EARLIER(ejempl[Código])
		)	
CONTAR.SI en DAX versiones de office anterior a 2016

Si te gustó este post, recuerda que puedes suscribirte de manera gratuita y recibirás información valiosa para tu desempeño profesional.

La bondad es la única inversión que nunca falla.

H.D. THOREAU