Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.
Tengo una base de datos que necesito para poder contar solo la primera vez que aparece una fila de datos. A continuación se muestra parte de la base de datos:
Fecha | ID de cliente | Conjunto apto | Confirmado | Emitido | Sentado | Resultado | Importe de la venta |
2/27/2017 5:18:48 PM | 397500 | 1 | 1 | 0 | 0 | Roc | |
2/28/2017 9:03:05 PM | 397500 | 1 | 1 | 1 | 0 | 1Leg | |
2/27/2017 6:04:14 PM | 397501 | 1 | 1 | 0 | 0 | Ctc | |
2/27/2017 5:48:22 PM | 397502 | 1 | 1 | 1 | 1 | 3 | |
3/6/2017 7:05:05 PM | 397502 | 1 | 1 | 0 | 0 | Roc | |
3/8/2017 2:39:46 PM | 397502 | 1 | 1 | 0 | 0 | Unissued | |
3/9/2017 10:08:13 AM | 397502 | 1 | 1 | 1 | 1 | 3 | |
2/27/2017 12:57:33 PM | 397503 | 1 | 0 | 0 | 0 | Roc | |
3/2/2017 4:09:14 PM | 397503 | 1 | 1 | 0 | 0 | Cnc | |
2/27/2017 6:00:03 PM | 397504 | 1 | 1 | 1 | 0 | Ctc | |
3/14/2017 5:14:40 PM | 397504 | 1 | 0 | 0 | 0 | Verif | |
2/27/2017 6:15:12 PM | 397505 | 1 | 1 | 0 | 0 | Ctc | |
2/27/2017 6:01:54 PM | 397506 | 1 | 0 | 1 | 0 | 1Leg | |
2/27/2017 1:07:50 PM | 397507 | 1 | 0 | 1 | 1 | Venta | 21170.6 |
3/6/2017 3:57:19 PM | 397508 | 1 | 1 | 1 | 1 | Venta | 13387 |
3/7/2017 12:17:35 PM | 397509 | 1 | 1 | 1 | 0 | Nc | |
3/8/2017 9:38:57 AM | 397509 | 1 | 1 | 1 | 1 | 3 | |
3/18/2017 12:12:22 PM | 397509 | 1 | 1 | 0 | 0 | Ctc | |
2/27/2017 5:55:42 PM | 397510 | 1 | 0 | 0 | 0 | Roc | |
3/6/2017 2:24:53 PM | 397510 | 1 | 1 | 0 | 0 | Coc | |
2/27/2017 2:21:20 PM | 397511 | 1 | 1 | 0 | 0 | Roc | |
3/6/2017 2:10:11 PM | 397511 | 1 | 1 | 1 | 1 | Venta | 12887 |
3/9/2017 4:11:31 PM | 397511 | 1 | 1 | 1 | 1 | 3 | |
2/27/2017 1:26:06 PM | 397512 | 1 | 1 | 1 | 0 | 1Leg | |
2/27/2017 1:27:45 PM | 397513 | 1 | 1 | 0 | 0 | Roc | |
3/1/2017 5:22:00 PM | 397513 | 1 | 1 | 1 | 0 | Nh | |
2/27/2017 2:02:50 PM | 397514 | 1 | 1 | 0 | 0 | Roc | |
3/1/2017 1:42:26 PM | 397514 | 1 | 1 | 0 | 0 | Coc | |
2/28/2017 8:01:00 AM | 397515 | 1 | 1 | 1 | 1 | 5 |
Por lo tanto, si quiero saber cuántos clientes (ID de cliente) se puso en contacto con nosotros en un mes no me gustaría contar cada vez que hablamos con ellos, sólo la primera vez. Es decir, el ID de cliente 397500 con el que hablamos el 2/27 y otra vez el 2/28. Ya que es el mismo cliente, sólo quiero contarlo una vez, para el día 27. Cualquier ayuda, sugerencias o ideas son muy apreciados!
Hw
Solved! Go to Solution.
Si no desea usar DAX, puede obtener el mismo resultado en el Editor de consultas mediante Agrupar por
1) Duplica tu mesa
2) luego Agrupar por - ID de cliente y la nueva columna "Primer contacto" que está creando en función de la fecha MIN para cada ID de cliente
3) Cerrar y aplicar
4) Crear una matriz - arrastre Primer contacto a las filas y el ID de cliente a los valores
(cambiar a Distinct -aunque los valores ya son distintos porque hicimos el Grupo BY)
Siga la imagen de abajo...
OPCIÓN 2
En realidad, puede lograr el mismo resultado con una columna DAX simple en su tabla actual
Columna de primer contacto: CALCULATE ( FIRSTNONBLANK('Table'[Date],1), ALLEXCEPT('Table', 'Table'[Customer ID]) )
A continuación, cree una matriz SIN EMBARGO
1) utilizar la primera columna de contacto en las filas (mantener sólo año y mes de la jerarquía)
2) arrastre la primera columna de contacto de nuevo, pero esta vez a los valores
Y esta vez tienes que cambiar el valor por defecto primero a un recuento distinto
¡Espero que esto ayude!
¡Avísame si tienes alguna pregunta!
Hola @hoggwildd,
Según su descripción, desea obtener el número de clientes distintos mensualmente, ¿verdad?
Si este es un caso, puede consultar los pasos a continuación para lograr su requisito:
1. Agregue calcular la columna "año y mes" para almacenar el valor que se utilizó para agrupar.
Year&Month = [Date].[Year]*100+[Date].[MonthNo]
2. Cree una tabla calculada para mostrar los registros agrupados.
Tabla de resumen: RESUMEN(Sheet3,Sheet3[Año y mes], "Distinct Count",DISTINCTCOUNT(Sheet3[Customer ID]), "Count",COUNT(Sheet3[Customer ID]), "Detail Customer(Distinct)", CONCATENATEX(DISTINCT(SELECTCOLUMNS(FILTER(ALL(Sheet3),[Year&Month]-EARLIER(Sheet3[Year&Month])),"Custom ID",[Customer ID])),[Custom ID],","))
3. Cree un objeto visual de tabla para mostrar el resultado.
saludos
Xiaoxin Sheng
Gracias a ambos por su consejo, tiempo y ayuda. ¡Me doy cuenta de que esto está muy por encima de mi cabeza! Ahora he pasado casi 3 días en esto y estoy más confundido que cuando empecé. ¡Parece tan simple en mi cabeza! lol
Todo este tiempo pensé que me estaba volviendo bastante bueno en esto también. Esto me demuestra que realmente necesito tomar un curso.
Gracias de nuevo,
Hw
Lamento escuchar eso - no te rindas, DAX es una herramienta impresionante una vez que te des cuenta!
He copiado sus datos en un pbix y creé lo que creo que necesita. Por desgracia, no sé cómo puedo compartir ese archivo con usted ... ¿Quizás la siguiente captura de pantalla sea suficiente? Muestra el extracto que necesita para crear una tabla de clientes que contiene fechas para el primer contacto para cada cliente y todos los datos que se encuentran en esa tabla resumida. El gráfico de barras muestra los recuentos de clientes por mes: tenga en cuenta cómo solo muestra 2 para marzo.
La columna DAX para el mes tiene este aspecto:
Mes - MES(Clientes[Primer contacto])
¡Espero que esto ayude!
Salud
Cristiano
Si no desea usar DAX, puede obtener el mismo resultado en el Editor de consultas mediante Agrupar por
1) Duplica tu mesa
2) luego Agrupar por - ID de cliente y la nueva columna "Primer contacto" que está creando en función de la fecha MIN para cada ID de cliente
3) Cerrar y aplicar
4) Crear una matriz - arrastre Primer contacto a las filas y el ID de cliente a los valores
(cambiar a Distinct -aunque los valores ya son distintos porque hicimos el Grupo BY)
Siga la imagen de abajo...
OPCIÓN 2
En realidad, puede lograr el mismo resultado con una columna DAX simple en su tabla actual
Columna de primer contacto: CALCULATE ( FIRSTNONBLANK('Table'[Date],1), ALLEXCEPT('Table', 'Table'[Customer ID]) )
A continuación, cree una matriz SIN EMBARGO
1) utilizar la primera columna de contacto en las filas (mantener sólo año y mes de la jerarquía)
2) arrastre la primera columna de contacto de nuevo, pero esta vez a los valores
Y esta vez tienes que cambiar el valor por defecto primero a un recuento distinto
¡Espero que esto ayude!
¡Avísame si tienes alguna pregunta!
Querido Sean, mi respuesta puede ser una sorpresa después de 7 años de tu publicación. Soy nuevo en Power BI. Entendí y logré obtener la "Primera Fecha" a través de la generación de la 2ª tabla en Power Query. No pude entender la lógica de su fórmula DAX. ¿Podría explicar la lógica? Gracias
La opción 2 me ayudó a desengancharme donde estaba tratando de encontrar la fecha original de una lista de registros por para un campo en particular. ¡Gracias!
Hola hansen922, ¿Podría explicar por qué se usa "1" como expresión en la función "Firstnonblank"? Gracias.
Muy bonito. Gracias.
Hola JacksonAndrew, ¿Podría explicar por qué se usa "1" como expresión en la función "Firstnonblank"? Gracias.
bomb.com
Esto es realmente increíble. Gracias por compartir. ¿Hay alguna manera de encontrar la diferencia entre el último y el primer punto de datos en función de la fecha creada?
Si simplemente desea el número de clientes únicos por mes calendario, puede tener una medida como esta:
clientes únicos: DISTINCTCOUNT(CustomerID)
Y luego usas el nombre del mes como contexto en tus visualizaciones - de esa manera, verás clientes unqiue para enero, febrero, etc. Para mayor comodidad, agregaría el nombre del mes como columna calculada de la tabla utilizando la función DAX MONTH.
Normalmente, sin embargo, en lugar de mirar los meses calendario, las métricas mensuales se basan en una ventana móvil de 28 días , algo como esto:
clientes únicos que se mueven 28 días
CALCULATE(
[clientes únicos],
FECHASINPERIOD(
'Fecha'[Fecha],
LASTDATE( 'Fecha'[Fecha]),
-28, DÍA
)
)
De esta manera se está normalizando para diferentes longitudes de mes y también obtiene una métrica mensual válida y completa todos los días.
¡Espero que esto ayude!
Cristiano
Cristiano
Gracias por el tiempo y la respuesta
Somos una organización de ventas y nos ponemos en contacto con los clientes repetidamente, mes tras mes. Si usamos el distintocount sería contar el mismo cliente el próximo mes (o 6 meses a partir de ahora) de nuevo la primera vez que nos contactamos con ellos en ese mes?
En cuanto al período del mes, a veces nos fijamos en trimestres, años, etc. Tengo una línea de tiempo incorporada que nos permite establecer los parámetros como se desee. El mes no fue importante y debería haberlo omitido. Perdón por la confusión.
Hw
Sí, sin embargo, todo depende del contexto.
Sin contexto, la medida que usa DISTINCTCOUNT contará todos los clientes de la tabla una sola vez. Pero la verdadera magia de DAX es que es sensible al contexto: si proporciona un contexto, la medida se evaluará en ese contexto.
Por ejemplo, si configura un gráfico de barras que muestra los recuentos de clientes por mes (meses en eje X, medida en el eje Y), el contexto es la lista de meses disponibles y la medida se evaluará por mes, es decir, los clientes se cuentan por separado al mes.
¿Tiene sentido?
Cristiano
He estado trabajando con esto y no puedo hacer que funcione. Usando los datos con una medida de recuento distinto obtengo:
Conjunto apto | conteo distinto |
1 | 14 |
Gran Total | 14 |
Eso es usar un corte de línea de tiempo sólo a febrero, y eso es preciso. Pero cuando hago la línea de tiempo marzo que obtengo:
Conjunto apto | conteo distinto |
1 | 9 |
Gran Total | 9 |
que sólo debería ser 2.
El ID de cliente 397508 y 397509 son los únicos dos clientes que PRIMERO se puso en contacto con nosotros en marzo de acuerdo con los datos. Es por eso que pensé que necesitaba escribir una medida que buscara la primera fecha para cada cliente y luego contara solo esa fila de datos.
La base de datos real tiene muchas más columnas, una de las cuales sería "fuente" y eso sería realmente cómo queremos configurar la tabla, pero no creo que eso va a cambiar este problema. Te lo digo en caso de que creas que lo haría, si es así puedo añadir eso a la muestra para darte una mejor idea.
Una vez más no puedo agradecerle lo suficiente por su tiempo y asistencia. ¡Esto me está dando una paliza!
Hw
Ah, ya veo - He entendido mal su requisito: Pensé que estaba buscando clientes únicos por mes (o cualquier otro período de tiempo) mientras que en realidad está buscando nuevos clientes únicos por mes (donde "nuevo" significa primer contacto).
En ese caso, su opción más fácil es utilizar una tabla Resumir, es decir, haga clic en "Nueva tabla" en la pestaña Modelado y crear una nueva tabla utilizando este tipo de instrucción DAX:
Primer contacto del cliente: SUMMARIZE(Table, CustomerID, "FirstDate", MIN(Date))
Esto le dará una tabla donde cada cliente se empareja con la primera fecha de contacto. Si conoce SQL, la función Summarize es el equivalente DAX de GROUP BY. A continuación, esta tabla se puede segmentar como se describió anteriormente.
Ahora, hay otra manera de hacer esto que es un poco más complicado, pero también más potente: si quieres razonar sobre ambos, la primera fecha, así como los datos de contactos posteriores (por ejemplo, con el fin de averiguar el tiempo promedio transcurrido entre un primer contacto y un contacto de seguimiento) entonces usted querría poner la primera fecha a la derecha en la tabla que contiene todos los contactos. Usted puede hacer eso mediante el uso de la función EARLIER - magia DAX realmente potente! 🙂
¡Espero que esto ayude!
Cristiano