Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The 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.

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo agregar medidas con contexto de fecha?

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:

B_Rax_0-1739376127402.png

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.

B_Rax_1-1739376295906.png

Esta es la idea general de mi objeto visual objetivo:

B_Rax_2-1739376336068.png

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.

15 REPLIES 15
Syndicate_Admin
Administrator
Administrator

Gracias @B_Rax

Espero poder ayudarte de nuevo en el futuro.

Realmente ayuda si adjunta datos como texto en lugar de serigrafía. Bien.

Syndicate_Admin
Administrator
Administrator

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! 👍

Syndicate_Admin
Administrator
Administrator

@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.

Syndicate_Admin
Administrator
Administrator

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

speedramps_0-1739437896909.png

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%

speedramps_3-1739438988833.png

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

speedramps_4-1739439194919.png

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.

Syndicate_Admin
Administrator
Administrator

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

vheqmsft_0-1739426209593.png

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

Syndicate_Admin
Administrator
Administrator

@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

speedramps_1-1739390740732.png

speedramps_2-1739390822325.png

¿Espero que esto ayude?

Syndicate_Admin
Administrator
Administrator

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.

Syndicate_Admin
Administrator
Administrator

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):

  • Contratos de arrendamiento: tabla de contratos que incluye la unidad relevante y las fechas de inicio/finalización del período del contrato.
  • Unidades: tabla de unidades en el inventario, su tipo de equipo y la fecha en que se agregaron.

Gol:
Cree un objeto visual que se muestre para cualquier contexto de fecha:

  • Cada tipo de equipo
  • Número de días que ese tipo ha estado disponible para estar en contratos en todas las unidades
  • Número de días que ese tipo ha estado en contrato en todas las unidades
  • Relación entre disponible y asignada (utilización).

Proceso:

Tengo tres medidas:

  • Días disponibles: calcula el número de días que una unidad estuvo disponible para estar en contratos.
  • Días asignados: calcula el número de días que una unidad estuvo realmente en contratos.
  • Utilización: divide los días asignados por los días disponibles.

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 contratoID de unidadFecha de inicioFecha de finalización
1101/01/202001/03/2020
2101/04/202001/04/2020
3201/01/202001/02/2020
4301/10/202001/15/2020
5301/16/202001/20/2020
6302/01/202002/05/2020
7502/02/202002/04/2020
8401/10/202001/15/2020
9101/06/202001/08/2020
10101/09/202001/12/2020

Unidades

ID de unidadFechaAgregarTipo de equipo
101/01/2020Camión
201/01/2020Camión
301/05/2020Remolque
401/09/2020Remolque
502/02/2020Camión

Ejemplo de resultado deseado para el 1/1/2020 - 20/01/2020

Tipo de equipoRecuento de unidadesDías DisponiblesDías asignadosUtilización
Remolque2281760.7%
Camión2401332.5%

Si esto sigue sin estar claro, sea específico en lo que necesita. Gracias.

Syndicate_Admin
Administrator
Administrator

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.

Syndicate_Admin
Administrator
Administrator

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.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

FebPBI_Carousel

Power BI Monthly Update - February 2025

Check out the February 2025 Power BI update to learn about new features.

Feb2025 NL Carousel

Fabric Community Update - February 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors
Top Kudoed Authors