Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code FABINSIDER for a $400 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.
Actualmente tengo una tabla de equipos de alquiler y una lista de contratos a los que se les asignó con fechas. Mi objetivo es crear una imagen que me dé un desglose del tipo de equipo, el número de unidades, el número de días disponibles en todas las unidades y el número de días asignados a los contratos en todas las unidades dentro de una ventana de fecha determinada. Aquí está mi muestra de pbix.
Este es mi modelo semántico de muestra:
Days Available =
VAR add_date =
SELECTEDVALUE(Units[AddDate])
VAR min_date =
MIN('Calendar'[Date])
VAR start_date =
IF( add_date > min_date, add_date, min_date)
VAR end_date =
CALCULATE(
MAX('Calendar'[Date]),
'Calendar'[Date] <= TODAY(),
KEEPFILTERS('Calendar')
)
VAR available_dates =
DATESBETWEEN('Calendar'[Date], start_date, end_date)
RETURN
COUNTROWS(available_dates)
Days Assigned =
VAR add_date =
SELECTEDVALUE(Units[AddDate])
VAR min_date =
MIN('Calendar'[Date])
VAR start_date =
IF( add_date > min_date, add_date, min_date)
VAR end_date =
CALCULATE(
MAX('Calendar'[Date]),
'Calendar'[Date] <= TODAY(),
KEEPFILTERS('Calendar')
)
VAR available_dates =
DATESBETWEEN('Calendar'[Date], start_date, end_date)
VAR contract_dates =
DATESBETWEEN('Calendar'[Date], SELECTEDVALUE('Lease Contracts'[StartDate]), SELECTEDVALUE('Lease Contracts'[EndDate]))
VAR dates_joined =
NATURALINNERJOIN(available_dates, contract_dates)
RETURN
COUNTROWS(dates_joined)
He conseguido crear dos objetos visuales sin agregar. Uno para los días disponibles y otro para los días asignados. Sin embargo, las medidas utilizadas para calcular esos valores requieren que UnitID y ContractID, respectivamente, sean precisos. Eso significa que no funcionan cuando se agregan por EquipmentType.
Esta es la idea general de mi objeto visual objetivo:
No estoy seguro de si necesito alguna medida separada que agregue los dos primeros o si necesito reelaborar todo el enfoque. He considerado columnas calculadas, pero hasta donde yo sé, no cambiarían los valores en función de un filtro/segmentador de fecha.
Gracias @B_Rax
Espero poder ayudarte de nuevo en el futuro.
Realmente ayuda si adjunta datos como texto en lugar de serigrafía. Bien.
Hola agaib @B_Rax
No hemos recibido ningún comentario de su parte con respecto a la solución.
Pero recuerdo la rapidez con la que respondías enérgicamente cuando te promocionaban, por ejemplo, los datos 🤔
Si no lo hacemos aquí, entonces la solución será aceptada después de un período,
Pero nos gustaría saber cómo te fue.
¡Gracias por usar el foro de la comunidad! 👍
@B_Rax
¿Ya tienes algún comentario sobre la solución?
Estoy disponible para un poco más de tiempo hoy y luego el viernes estoy muy ocupado, y luego entramos en el fin de semana.
Así que espero que podamos concluir cualquier sesión de preguntas y respuestas hoy, para obtener una respuesta rápida.
Hola de nuevo @B_Rax
Gracias @v-heq-msft por su solución alternativa.
No estoy seguro de que produzca las respuestas @B_Rax quiere.
Es muy complicado para los novatos como @B_Rax aprender.
Contiene muchas ramas en las instrucciones SWITCH, cada una de las cuales necesitará pruebas rigurosas.
Y es difícil de cambiar si el usuario decide que quiere excluir fines de semana y días festivos.
Por lo tanto, sugiero respetuosamente esta solución PBIX que puede descargar desde Onedrive
Haga clic aquí
Cómo funciona ...
Usar una tabla de calendario separada con fechas contiguas para la ventana de fecha de la segmentación de datos
Crear una medida "esclava" para calcular los días disponibles
_Days available =
// this measure must be used a XSUMX wrapper
// get the unit add date
var unitstart = SELECTEDVALUE(Units[AddDate])
// create a temp file of dates using the date slicer window and add date
var mydays =
FILTER('Calendar',
'Calendar'[Date] > unitstart
)
RETURN
// count the number of dates
COUNTROWS(mydays)
A continuación, una medida "maestra" para iterarte el esclavo para cada unidad en su contexto de informes (por ejemplo, contratos, unidades o tipo de equipo)
Days available =
// this measure uses the SUMX function to iterate the calcuation for any unit
var daysavailabe =
SUMX(
Units,
[_Days available]
)
RETURN
// avaiability can only be measured at unit or type level but not contract level
IF(ISINSCOPE(Contracts[ContractID]),
BLANK(),
daysavailabe)
Crear una medida "esclava" para calcular los días de contrato
_Days on contract =
// this measure must be used a XSUMX wrapper
// get the contract date range
var contractstart = SELECTEDVALUE(Contracts[StartDate])
var contractend = SELECTEDVALUE(Contracts[EndDate])
// create a temp file of dates using the date slicer window and contract date
var mydays =
FILTER('Calendar',
'Calendar'[Date] >= contractstart &&
'Calendar'[Date] <= contractend
)
RETURN
// count the number of dates
COUNTROWS(mydays)
A continuación, una medida "maestra" para iterarte el esclavo de cada unidad en su contexto de reporte.
Days on contract =
// this measure uses the SUMX function to iterate the calcuation for any contract
SUMX(
Contracts,
[_Days on contract]
)
Cuando se ejecuta el informe a nivel de tipo de equipo, los totales se acumulan automáticamente
Tenga en cuenta que todas las fechas están en formato dd/mm/aaaa del Reino Unido, pero puede mostrarlas en EE. UU. MM/DD/AAAAA
Por ejemplo, hubo 366 días en 2020 (año bisiesto), pero la Unidad 4 se agregó el 9 de enero.
Así que estaba disponible 366 - 9 = 357
Tenía un contrato por 6 días.
El uso fue 6 / 357 = 1.68%
Si cambia la ventana de la segmentación de fechas de 12/01/2020 a 31/12/2020
Luego, la disponibilidad y los días en el contrato cambian en consecuencia
Este método es fácil de entender y aprender, y fácil de probar porque no tiene muchas ramas de conmutación.
Si solo desea incluir días laborables y excluir fines de semana y días festivos, puede agregar una columna de días laborables a la tabla Calendario y agregarla en lugar de contar filas.
Por favor, haga clic en los pulgares hacia arriba para esta sugerencia (porque le dediqué mucho tiempo)
y también haga clic en [Aceptar solución] si funciona.
Espero que ayude y compense nuestro difícil comienzo. 👍
Un cordial saludo, 😀
He estado ocupado en otras cosas, pero tengo algo de tiempo para revisar esta solución. Creo que servirá para mi informe. Gracias por la ayuda. Las medidas auxiliares para SUMX era el paso que no había considerado.
Hola @B_Rax ,
Puede probar los siguientes pasos:
Primero crea una tabla de fechas
Date =
VAR startDate =
SWITCH(
TRUE(),
MIN('Lease Contracts'[StartDate]) <= MIN('Lease Contracts'[EndDate]) && MIN('Lease Contracts'[StartDate]) <= MIN(Units[AddDate]), MIN('Lease Contracts'[StartDate]),
MIN('Lease Contracts'[EndDate]) <= MIN('Lease Contracts'[StartDate]) && MIN('Lease Contracts'[EndDate]) <= MIN(Units[AddDate]), MIN('Lease Contracts'[EndDate]),
MIN(Units[AddDate])
)
VAR endDate =
SWITCH(
TRUE(),
MAX('Lease Contracts'[StartDate]) >= MAX('Lease Contracts'[EndDate]) && MAX('Lease Contracts'[StartDate]) >= MAX(Units[AddDate]), MAX('Lease Contracts'[StartDate]),
MAX('Lease Contracts'[EndDate]) >= MAX('Lease Contracts'[StartDate]) && MAX('Lease Contracts'[EndDate]) >= MAX(Units[AddDate]), MAX('Lease Contracts'[EndDate]),
MAX(Units[AddDate])
)
RETURN
CALENDAR(startDate,endDate)
En segundo lugar, crear medidas
Unit Count =
CALCULATE(
DISTINCTCOUNT('Lease Contracts'[UnitID]),
FILTER(
'Lease Contracts',
'Lease Contracts'[StartDate] >= MIN('Date'[Date]) &&
'Lease Contracts'[EndDate] <= MAX('Date'[Date])
)
)
AvailableDays =
DATEDIFF(
MIN('Lease Contracts'[StartDate]),
MAX('Lease Contracts'[EndDate]),DAY)
+ 2
Days Assigned =
VAR addDate =
CALCULATE(
COUNTROWS('Lease Contracts'),
FILTER(
ALLEXCEPT(
'Lease Contracts',
Units[EquipmentType]
),
'Lease Contracts'[StartDate] >= MIN('Date'[Date]) &&
'Lease Contracts'[EndDate] <= MAX('Date'[Date])
)
)
RETURN
CALCULATE(
SUMX(
'Lease Contracts',
DATEDIFF('Lease Contracts'[StartDate],'Lease Contracts'[EndDate],DAY)
),
FILTER(
'Lease Contracts',
'Lease Contracts'[StartDate] >= MIN('Date'[Date]) &&
'Lease Contracts'[EndDate] <= MAX('Date'[Date])
)
) + addDate
Utilization = DIVIDE([Days Assigned],[AvailableDays],0)
Resultado final
Saludos
Alberto He
Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente
@B_Rax
Descargue esta solución de ejemplo de PBIX de Onedrive
Haga clic aquí
Hasta ahora solo he creado 1 compás. Intentaré hacer lo otro mañana.
Nota: He utilizado formatos de fecha del Reino Unido
Cómo funciona ...
Agregue una tabla de calendario separada con fechas consecutivas para todo el rango de fechas.
Tenga en cuenta que la ventana de fecha cambia el contrato 5 de 5 a 3 días, y todos los totales de unidades y tipos
¿Espero que esto ayude?
Gracias. ¡Muy apreciado!
Estoy tratando de construir algo de la medida ahora,
Pero aquí se está haciendo tarde. Así podría ser mañana.
Buenas noches👍
Duerme bien y dulces sueños.
Tuve un gran día, gracias y resolví los problemas de otros miembros.
Si me facilitas la información solicitada estaré encantado de ayudarte.
De lo contrario, espero que otro Super User te ayude.
Tal vez pídele a un amigo, colega o gerente que vea si pueden ayudarte a reformular tu descripción.
Recuerde, queremos ayudar ahora y en el futuro 😀
Una vez más, la información que solicitó está en la publicación original y proporcionó un ejemplo de pbix. Sin embargo, intentaré resaltar los puntos principales y proporcionar tablas aquí si no puede ver el archivo de ejemplo. Las medidas involucradas están en la publicación original.
Tengo dos tablas (más una tabla de fechas):
Gol:
Cree un objeto visual que se muestre para cualquier contexto de fecha:
Proceso:
Tengo tres medidas:
Estas medidas funcionan, pero no para el objeto visual de destino que se agrega por tipo de equipo. Por lo tanto, necesito un enfoque diferente para estos cálculos o agregar pasos adicionales.
Contratos de arrendamiento
Id. de contrato | ID de unidad | Fecha de inicio | Fecha de finalización |
1 | 1 | 01/01/2020 | 01/03/2020 |
2 | 1 | 01/04/2020 | 01/04/2020 |
3 | 2 | 01/01/2020 | 01/02/2020 |
4 | 3 | 01/10/2020 | 01/15/2020 |
5 | 3 | 01/16/2020 | 01/20/2020 |
6 | 3 | 02/01/2020 | 02/05/2020 |
7 | 5 | 02/02/2020 | 02/04/2020 |
8 | 4 | 01/10/2020 | 01/15/2020 |
9 | 1 | 01/06/2020 | 01/08/2020 |
10 | 1 | 01/09/2020 | 01/12/2020 |
Unidades
ID de unidad | FechaAgregar | Tipo de equipo |
1 | 01/01/2020 | Camión |
2 | 01/01/2020 | Camión |
3 | 01/05/2020 | Remolque |
4 | 01/09/2020 | Remolque |
5 | 02/02/2020 | Camión |
Ejemplo de resultado deseado para el 1/1/2020 - 20/01/2020
Tipo de equipo | Recuento de unidades | Días Disponibles | Días asignados | Utilización |
Remolque | 2 | 28 | 17 | 60.7% |
Camión | 2 | 40 | 13 | 32.5% |
Si esto sigue sin estar claro, sea específico en lo que necesita. Gracias.
Esperamos poder ayudarle cuando se reciba la información anterior.
Tal vez otro miembro te ayude con lo que has proporcionado.
Me temo que debe ser frustrante que no puedas hacer tu trabajo,
Pero recuerde que somos voluntarios no remunerados que solo quieren ayudar.
👍
Desde tu primer post has sido hostil hacia mí. Y ahora me estás insultando descaradamente. Lo siento si estás teniendo un mal día. Agradezco su intento de brindar asistencia, pero sugeriría que si les dice a los demás que sean diligentes y dediquen tiempo a elaborar la publicación perfecta, también dediquen tiempo a leer y comprender esa publicación. Además, recomiendo revisar sus respuestas, ya que se leen de manera muy poco profesional (incluso para un voluntario no remunerado). De nuevo, gracias.
Queremos ayudarte, pero tu descripción es demasiado vaga.
Por favor, NO copie y pegue su DAX que no funciona y espere que comprendamos lo que quiere hacer. Eso es un poco loco. 😀
Por favor, dé una descripción funcional simple y no técnica de lo que desea, luego permítanos sugerir la solución. Gracias.
Proporcione datos de entrada de ejemplo como texto de tabla (no una impresión de pantalla) para que podamos importar los datos y crear una solución para usted.
Elimine las columnas innecesarias que puedan causar confusión.
(En tu descripción has dedicado el 75% del texto a explicar con orgullo lo que tienes trabajo y solo el 25% al problema real, lo que nubla y confunde el tema).
Cambie el nombre de las columnas a nombres descriptivos. Evita la jerga.
Proporcione también el ejemplo de salida deseado, con una descripción clara paso a paso de los cálculos del flujo del proceso.
Recuerde no compartir datos privados... No queremos que te metas en problemas. 😧
Tómese el tiempo y el cuidado de usar los mismos nombres de tabla y campo en la entrada, la salida y la descripción para que podamos comprender su problema y ayudarlo.
Trate de mantenerlo simple y haga una pregunta por ticket.
Obtendrá una respuesta rápida si dedica tiempo, cuidado y esfuerzo a escribir descripciones claras de los problemas.
Recuerde que está recibiendo ayuda experta gratuita, así que esfuércese mucho por hacer preguntas y proporcionar ejemplos.
Las descripciones vagas pueden hacerte perder tu tiempo y el nuestro.
Esperamos poder ayudarle cuando le facilitemos 😀 la información anterior
Con respeto, describí mi objetivo y mis problemas. Vinculé un ejemplo simple de pbix con lo que estoy trabajando. El dax que vinculé funciona. El siguiente paso es con lo que necesito ayuda. "Las descripciones vagas pueden hacerte perder tu tiempo y el nuestro". Esto estaba lejos de ser vago y era una pérdida de tiempo. Por favor, especifique qué más información le gustaría si está interesado en ayudar. Gracias.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the February 2025 Power BI update to learn about new features.