Jack-B-Quick
Nuevo en BI y recién me estoy mojando los pies.
Tengo la siguiente tabla de resumen a continuación basada en algunos datos de fondo (tabla ‘SampleLicCnts’). La columna Frecuencia era simple, por supuesto, simplemente establezca el valor en ‘recuento’ frente a ‘suma’. Creé la columna Bin para poder usarla para calcular la frecuencia acumulativa. Fórmulas respectivas para bin y frecuencia acumulada aquí…
Bin = FLOOR(DIVIDE('SampleLicCnts'[LicCnt],1),1)
Cumulative Frequency = CALCULATE(COUNT(SampleLicCnts[LicCnt])
,FILTER(ALL(SampleLicCnts),SampleLicCnts[BIN_NUMBER]<=MAX(SampleLicCnts[BIN_NUMBER])))
Estoy luchando para calcular el Frecuencia acumulada inversa (texto rojo) como se muestra aquí…
Licencias | Compartimiento | Frecuencia | Frecuencia acumulada | Frecuencia acumulada inversa |
1 | 1 | 2715 | 2715 | 90980 |
2 | 2 | 1774 | 4489 | 88265 |
3 | 3 | 1083 | 5572 | 83776 |
4 | 4 | 565 | 6137 | 78204 |
5 | 5 | 249 | 6386 | 72067 |
6 | 6 | 100 | 6486 | 65681 |
7 | 7 | 44 | 6530 | 59195 |
8 | 8 | 27 | 6557 | 52665 |
9 | 9 | dieciséis | 6573 | 46108 |
10 | 10 | 8 | 6581 | 39535 |
11 | 11 | 6 | 6587 | 32954 |
12 | 12 | 1 | 6588 | 26367 |
13 | 13 | 3 | 6591 | 19779 |
14 | 14 | 2 | 6593 | 13188 |
15 | 15 | 2 | 6595 | 6595 |
Traté de revertir a la lógica de la frecuencia acumulativa cambiando <=MAX a>=MIN pero eso no produce los resultados correctos. También hice referencia a este tema de «Suma inversa», pero no es exactamente el mismo problema.
¿Alguna idea sobre cómo calcular la frecuencia acumulada inversa? Por cierto… En última instancia, busco el acumulado inverso Relativo Frecuencia, pero para llegar allí primero necesito la Frecuencia Acumulativa Inversa.
¡Gracias por adelantado!
cmmahan
En respuesta a Jack-B-Quick
Veo lo que quieres decir sobre el cambio de datos. Para esta solución, asumo que su valor Lic se puede ordenar en sus datos y no es solo una clave aleatoria. Si es así, es probable que deba volver a crear la columna Bin, solo para que se pueda ordenar.
Primero, cambié la medida de frecuencia acumulada a esta expresión:
Cumulative count = if(HASONEVALUE(Data[LicCnt]),COUNTAX(FILTER(ALL(Data),Data[LicCnt]<=SELECTEDVALUE(Data[LicCnt])),[Count]),BLANK())
Luego configuré la medida de frecuencia acumulativa inversa en esto:
Measure1 = SUMX(FILTER(SUMMARIZE(ALL(Data),Data[LicCnt],"Cumulative Count",[Cumulative count]),[LicCnt]>=SELECTEDVALUE(Data[LicCnt])),[Cumulative count])
Lo que está haciendo es crear una tabla virtual donde agrega el Conteo acumulativo al LicCnt, y luego lo acumula en una sola tabla que se ve así:
Luego suma los valores de esta tabla virtual donde LicCnt es mayor que el valor actual. Esto mantiene el conteo cuando las cosas se reordenan a través de la clasificación, pero depende de que pueda ordenar por LicCnt.
Ashish_Mathur
Hola,
¿Podría compartir los datos sin procesar (en un formato que se pueda pegar en un archivo de MS Excel)?
Jack-B-Quick
En respuesta a Ashish_Mathur
La base de los datos se basa en un archivo de texto muy simple (LicCnt.txt) que se parece a los datos a continuación (primeras 50 filas de datos copiados/pegados). El problema no cambia, pero hay 6595 filas en total con valores variables del 1 al 15 (Frecuencia de cada valor presentado arriba). Adjuntaría el archivo pero no veo la opción para hacerlo.
Además… Un error ligeramente ambiguo de mi parte en la publicación original. En realidad, no tengo una tabla «Resumen» separada (solo la tabla original importada «LicCnt»). Agregué la columna Bin a la tabla (según la fórmula anterior). Luego creé un Visual y agregué LicCnt (cambio de Sum a Count) para obtener la columna de Frecuencia. Luego creé una medida para obtener la frecuencia acumulativa (nuevamente según la fórmula anterior).
¡Gracias!
licCnt
1
1
1
1
1
1
1
1
3
3
3
4
2
2
4
2
1
1
1
1
2
1
1
3
5
2
2
1
2
2
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
4
4
5
Ashish_Mathur
En respuesta a Jack-B-Quick
Hola,
¿Es este el resultado que esperas? Puede descargar mi archivo PBI desde aquí.
Jack-B-Quick
En respuesta a Ashish_Mathur
Los resultados que muestra (y en su archivo) están cerca, pero no exactamente lo que quiero, y cambian según la forma en que se ordenan los datos (esto no es lo deseado). Basado en las primeras 50 filas de datos pegados arriba, estos son los resultados que espero. Esto parece ser demasiado difícil en BI en comparación con fórmulas y «rellenos» muy simples en Excel.
licencia | Frecuencia | Frecuencia acumulada | Frecuencia acumulativa inversa | Frecuencia relativa acumulada inversa |
1 | 15 | 15 | 196 | 1.0000 |
2 | 24 | 39 | 181 | 0.9235 |
3 | 5 | 44 | 142 | 0.7245 |
4 | 4 | 48 | 98 | 0.5000 |
5 | 2 | 50 | 50 | 0.2551 |
Estoy mirando sus funciones tratando de averiguar exactamente qué están haciendo, pero aún no estoy familiarizado con RANKX y algunas de las otras lógicas que usó.
chile picante: También le agradezco su ayuda, pero su fórmula tampoco devuelve los valores adecuados para la frecuencia acumulada inversa. Y sí, ahora me doy cuenta de que no era necesario agregar la columna Bin.
¡Gracias!
Ashish_Mathur
En respuesta a Jack-B-Quick
Hola,
No tengo claro tu requerimiento. ¿Está diciendo que LicCnt siempre debe estar en orden ascendente?
cmmahan
En respuesta a Jack-B-Quick
Veo lo que quieres decir sobre el cambio de datos. Para esta solución, asumo que su valor Lic se puede ordenar en sus datos y no es solo una clave aleatoria. Si es así, es probable que deba volver a crear la columna Bin, solo para que se pueda ordenar.
Primero, cambié la medida de frecuencia acumulada a esta expresión:
Cumulative count = if(HASONEVALUE(Data[LicCnt]),COUNTAX(FILTER(ALL(Data),Data[LicCnt]<=SELECTEDVALUE(Data[LicCnt])),[Count]),BLANK())
Luego configuré la medida de frecuencia acumulativa inversa en esto:
Measure1 = SUMX(FILTER(SUMMARIZE(ALL(Data),Data[LicCnt],"Cumulative Count",[Cumulative count]),[LicCnt]>=SELECTEDVALUE(Data[LicCnt])),[Cumulative count])
Lo que está haciendo es crear una tabla virtual donde agrega el Conteo acumulativo al LicCnt, y luego lo acumula en una sola tabla que se ve así:
Luego suma los valores de esta tabla virtual donde LicCnt es mayor que el valor actual. Esto mantiene el conteo cuando las cosas se reordenan a través de la clasificación, pero depende de que pueda ordenar por LicCnt.
picante
En respuesta a Jack-B-Quick
Inv Cumulative Frequency = CALCULATE(COUNT(SampleLicCnts[LicCnt]) ,FILTER(ALL(SampleLicCnts), SampleLicCnts[BIN] >= MAX(SampleLicCnts[Bin])))
Además, ¿hay alguna razón específica para usar la fórmula Bin, en lugar de simplemente decir BIN = ¿Licenciado?
picante
Está en el camino correcto, pero no necesita consultar la tabla original una vez que tenga suficientes datos en su tabla de resumen.
InvCumulative Frequency = CALCULATE(SUM(Summary[Cumulative Frequency]), FILTER(ALL(Summary), Summary[Bin] < MAX(Summary[Bin])))
También puede volver a escribir su medida de ‘Frecuencia acumulada’ para obtener los datos que necesita de su tabla de resumen