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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Cálculo de las camas ocupadas durante el mes en la rebana

Hola a todos,

Esperaba que alguien pudiera ayudarme con algo en lo que estoy atrapado, por favor.

Somos un proveedor de atención domiciliaria y uno de los KPI que nos gustaría rastrear es el número de días que los residentes se alojaron en el hogar (llamémoslo ResDays) pero soy nuevo en PowerBI y en un poco de una pérdida con cómo calcularlo.

El informe que estoy construyendo tiene 3 tablas que creo que son relevantes para esta pregunta: DateTable, cv_BI_Occupancy y cv_facilities. Se establecen de la siguiente manera:

cv_facilities:

NombreDirección
Hogar de cuidado A123 XYZ
Hogar de cuidado B456 ABC
Hogar de cuidado C789 DEF

DateTable (fechas del 1 de enero de 2020 al 31 de diciembre de 2021):

FechaMonthYearMonthYearNoEjercicio financiero
01 de enero de 2020Ene 20202020012020
02 de enero de 2020Ene 20202020012020
03 de enero de 2020Ene 20202020012020
04 de enero de 2020Ene 20202020012020
05 de enero de 2020Ene 20202020012020

cv_BI_Occupancy (el sistema genera una fecha de licencia de 31 de diciembre de 2999 para las habitaciones que estén ocupadas actualmente):

SitioRoomNoTypeOfStayServicioLlegadaLeaveDate
Hogar de cuidado A114PermanenteAL21 de septiembre de 201201 de febrero de 2020
Hogar de cuidado A216Permanenteel16 de diciembre de 201918 de enero de 2020
Hogar de cuidado A117PermanenteAL23 de marzo de 201902 de enero de 2020
Hogar de cuidado A214Permanenteel13 de octubre de 201916 de marzo de 2020
Hogar de cuidado AG01PermanenteAL16 de abril de 201531 de diciembre de 2999
Hogar de cuidado A114PermanenteAL29 de septiembre de 202031 de diciembre de 2999
Hogar de cuidado A207PermanenteAL30 de diciembre de 201931 de diciembre de 2999
Hogar de cuidado B215PermanenteAL30 de enero de 202025 de agosto de 2020
Hogar de cuidado B111Permanenteel13 de octubre de 201408 de octubre de 2020
Hogar de cuidado B228PermanenteAL19 de junio de 202017 de diciembre de 2020
Hogar de cuidado B130Permanenteel03 de mayo de 201330 de noviembre de 2020
Hogar de cuidado B304PermanenteAL17 de enero de 201931 de diciembre de 2999
Hogar de cuidado B404PermanenteAL06 de diciembre de 201831 de diciembre de 2999
Hogar de cuidado B302PermanenteAL13 de febrero de 202031 de diciembre de 2999
Hogar de cuidado C118PermanenteAL08 de diciembre de 201906 de noviembre de 2020
Hogar de cuidado C112PermanenteAL18 de septiembre de 201309 de mayo de 2020
Hogar de cuidado C120PermanenteAL18 de marzo de 202025 de diciembre de 2020
Hogar de cuidado C113PermanenteAL15 de febrero de 201208 de enero de 2020
Hogar de cuidado C003PermanenteAL01 de septiembre de 202031 de diciembre de 2999
Hogar de cuidado C310Permanenteel22 de octubre de 202031 de diciembre de 2999
Hogar de cuidado C227PermanenteAL15 de junio de 202031 de diciembre de 2999

Las relaciones establecidas son las siguientes:

DateTable[Fecha] a cv_BI_Occupancy[Fecha de salida] - 1 a muchos

cv_facilities[nombre] a cv_BI_Occupancy [Sitio] - 1 a muchos

El informe que estoy tratando de crear será para un hogar de cuidado en un momento dado, y por un período en un momento dado por lo que hay dos segmentaciones sincronizadas con todas las páginas, que son DateTable[MonthYear] y cv_facilities[name]. Mostrará información financiera y no financiera para que este cálculo de ResDays solo forme una parte pequeña pero importante del informe general.

He replicado en Excel lo que esperaría que mis resultados fueran durante dos períodos aleatorios, así como cómo se compensaría de la tabla anterior:

Días de Residencia en JulioDías de Residencia en Noviembre
Hogar de cuidado A6290
Hogar de cuidado B217150
Hogar de cuidado C93126

SitioRoomNoTypeOfStayServicioLlegadaLeaveDateJul 2020Nov 2020
Hogar de cuidado A114PermanenteAL21 de septiembre de 201201 de febrero de 202000
Hogar de cuidado A216Permanenteel16 de diciembre de 201918 de enero de 202000
Hogar de cuidado A117PermanenteAL23 de marzo de 201902 de enero de 202000
Hogar de cuidado A214Permanenteel13 de octubre de 201916 de marzo de 202000
Hogar de cuidado AG01PermanenteAL16 de abril de 201531 de diciembre de 29993130
Hogar de cuidado A116PermanenteAL29 de septiembre de 202031 de diciembre de 2999030
Hogar de cuidado A207PermanenteAL30 de diciembre de 201931 de diciembre de 29993130
Hogar de cuidado B215PermanenteAL30 de enero de 202025 de agosto de 2020310
Hogar de cuidado B111Permanenteel13 de octubre de 201408 de octubre de 2020310
Hogar de cuidado B228PermanenteAL19 de junio de 202017 de diciembre de 20203130
Hogar de cuidado B130Permanenteel03 de mayo de 201330 de noviembre de 20203130
Hogar de cuidado B304PermanenteAL17 de enero de 201931 de diciembre de 29993130
Hogar de cuidado B404PermanenteAL06 de diciembre de 201831 de diciembre de 29993130
Hogar de cuidado B302PermanenteAL13 de febrero de 202031 de diciembre de 29993130
Hogar de cuidado C118PermanenteAL08 de diciembre de 201906 de noviembre de 2020316
Hogar de cuidado C112PermanenteAL18 de septiembre de 201309 de mayo de 202000
Hogar de cuidado C120PermanenteAL18 de marzo de 202025 de diciembre de 20203130
Hogar de cuidado C113PermanenteAL15 de febrero de 201208 de enero de 202000
Hogar de cuidado C003PermanenteAL01 de septiembre de 202031 de diciembre de 2999030
Hogar de cuidado C310Permanenteel22 de octubre de 202031 de diciembre de 2999030
Hogar de cuidado C227PermanenteAL15 de junio de 202031 de diciembre de 29993130

Puedo crear una columna en la tabla cv_BI_Occupancy con un cálculo que me da las cifras correctas si codigo duro en una fecha de inicio y finalización como esta:

DIAS DE RESIDENTES ?
VAR STARTDATE - FECHA(2020,07,01)
VAR ENDDATE - FECHA(2020,07,31)
devolución
IF(cv_BI_Occupancy[Llegada].[ Fecha] > ENDDATE, 0,
IF(cv_BI_Occupancy[LeaveDate] < STARTDATE, 0,
VALUE(DATEDIFF( MAX( STARTDATE, cv_BI_Occupancy[Llegada].[ Fecha]), MIN( cv_BI_Occupancy[LeaveDate], ENDDATE),DAY))
Pero esto se vuelve obsoleto tan pronto como el período cambia en la segmentación de datos, por lo que me gustaría hacer referencia a una fecha de inicio y finalización utilizando la segmentación de datos si es posible? También estoy seguro de que crear una columna no es la mejor manera de hacerlo, así que ¿hay un método más eficiente?
Cualquier ayuda en absoluto sería recibida con gratitud, gracias!
1 ACCEPTED SOLUTION
v-eqin-msft
Community Support
Community Support

No @T_Double_U ,

Que yo sepa, puede eliminar el relationhip entre la tabla Date y cv_BI_Occupancy tabla para poder usar DateTable[Date] para Slicer.

A continuación, utilice la siguiente fórmula para medir la creata:

1. en cv_BI_Occupancy mesa

RESIDENT DAYS =
VAR _STARTDATE =
    MIN ( 'Date'[Date] )
VAR _ENDDATE =
    MAX ( 'Date'[Date] )
RETURN
    IF (
        MAX ( 'cv_BI_Occupancy'[Arrival] ) > _ENDDATE,
        0,
        IF (
            MAX ( 'cv_BI_Occupancy'[LeaveDate] ) < _STARTDATE,
            0,
            VALUE (
                DATEDIFF (
                    MAX ( MAX ( 'cv_BI_Occupancy'[Arrival] ), _STARTDATE ),
                    MIN ( MAX ( cv_BI_Occupancy[LeaveDate] ), _ENDDATE ),
                    DAY
                )
            )
        )
    )

2. en cv_facilities mesa

Measure =
SUMX ( 'cv_BI_Occupancy', [RESIDENT DAYS] )

La salida final se muestra a continuación:

1.4.4.1.gif

Por favor, eche un vistazo al archivo pbix aquí.

Saludos
Eyelyn Qin
Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

10 REPLIES 10
Anonymous
Not applicable

Hola a todos

Gracias por la ayuda y los archivos de ejemplo! Voy a echar un vistazo en los próximos días y volver para confirmar que está funcionando como se esperaba.

¡Feliz Año Nuevo!

v-eqin-msft
Community Support
Community Support

No @T_Double_U ,

Que yo sepa, puede eliminar el relationhip entre la tabla Date y cv_BI_Occupancy tabla para poder usar DateTable[Date] para Slicer.

A continuación, utilice la siguiente fórmula para medir la creata:

1. en cv_BI_Occupancy mesa

RESIDENT DAYS =
VAR _STARTDATE =
    MIN ( 'Date'[Date] )
VAR _ENDDATE =
    MAX ( 'Date'[Date] )
RETURN
    IF (
        MAX ( 'cv_BI_Occupancy'[Arrival] ) > _ENDDATE,
        0,
        IF (
            MAX ( 'cv_BI_Occupancy'[LeaveDate] ) < _STARTDATE,
            0,
            VALUE (
                DATEDIFF (
                    MAX ( MAX ( 'cv_BI_Occupancy'[Arrival] ), _STARTDATE ),
                    MIN ( MAX ( cv_BI_Occupancy[LeaveDate] ), _ENDDATE ),
                    DAY
                )
            )
        )
    )

2. en cv_facilities mesa

Measure =
SUMX ( 'cv_BI_Occupancy', [RESIDENT DAYS] )

La salida final se muestra a continuación:

1.4.4.1.gif

Por favor, eche un vistazo al archivo pbix aquí.

Saludos
Eyelyn Qin
Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola @Eyelyn9 espero que no te importe que haga una pregunta de seguimiento aquí.

Si fuera a tratar de usar el mismo método para calcular los días unitarios en lugar de los días de residencia, tendría que omitir algunas filas duplicadas. Imagine 2 personas compartiendo una habitación para la duración completa de un período de 30 días, la medida en este momento calcularía 60 días ocupados ya que cada persona tendría su propia entrada en el sistema, lo que sería perfecto para mi consulta original, sin embargo, si quisiera saber cuántos días esa habitación específica estaba ocupada, me gustaría que la solución fuera sólo 30 días.

Este es un ejemplo:

SitioRoomNoTypeOfStayServicioLlegadaLeaveDateJul 2020Nov 2020
Hogar de cuidado A114PermanenteAL21 de septiembre de 201901 de octubre de 2020310
Hogar de cuidado A114PermanenteAL21 de septiembre de 201901 de enero de 2021030

Estaba pensando que sería capaz de copiar las medidas y simplemente ajustar un par de cosas, así que ¿es esta una enmienda fácil de hacer o hay una solución completamente nueva que se necesita?

Además, si es más fácil estoy más que feliz de crear una nueva publicación en lugar de volver a abrir un problema antiguo y resuelto.

Gracias de antemano!

Anonymous
Not applicable

Gracias Evelyn - que funciona perfectamente. Claramente estaba siendo demasiado testarudo con tratar de mantener el formato de segmentación!

Exactamente como lo estoy haciendo. Y como sé, tal vez sea la única manera.

Hola @T_Double_U, puede enviarme el archivo PBIX, podría darle un poco de ayuda. Porque tengo los mismos problemas antes.

Ashish_Mathur
Super User
Super User

Hola

¿Desea analizar los datos solo hasta un mes? es decir, ¿alguna vez querría obtener una respuesta a un nivel de fecha en particular, como la ocupación, como el 26 de julio de 2020? Además, ¿estarías bien si en el back-end trato el 31 de diciembre de 2999 como la fecha de hoy?


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
Anonymous
Not applicable

Gracias a ambos.

Ashish, para este KPI sería sólo para el mes completo y sólo para un mes a la vez.

Hola

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
Johanno
Responsive Resident
Responsive Resident

Hola, esto probablemente no es una solución final, pero tal vez alguna ayuda en el camino - una medida que cuenta los días que están dentro del mes seleccionado de la segmentación de datos:

Skärmklipp.PNG

Resident days selected month = 
VAR StartSelectedMonth = DATE(2020, SELECTEDVALUE(Dates[Month]), 1)
VAR EndSelectedMonth = DATE(2020, SELECTEDVALUE(Dates[Month])+1, 1) - 1
VAR Arrival = CALCULATE( MAX(cv_BI_Occupancy[Arrival]), ALL(Dates[Date])) //ignore the slicer
VAR Leave = CALCULATE( MAX(cv_BI_Occupancy[LeaveDate]), ALL(Dates[Date])) //ignore the slicer
VAR FilteredDateTable = FILTER(VALUES(Dates[Date]), 
                            Dates[Date] >= StartSelectedMonth && 
                            Dates[Date] <= EndSelectedMonth)
VAR Days = SUMX( FilteredDateTable, IF( Dates[Date] >= Arrival && Dates[Date] <= Leave, 1, 0))
RETURN Days

En general, debe usar una columna de medida en lugar de calculada siempre que sea posible, ya que se calcula cuando es necesario en lugar de usar memoria. Si es un modelo pequeño y si resuelve su problema no será un problema.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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