lawada
en nuestro negocio tenemos una función que permite a los usuarios reservar un horario y un día de la semana para recibir su servicio (semanal o quincenal), por ejemplo, el usuario X reservó su servicio para el viernes a las 10:00 a.m. Semanalmente, el usuario Y ha reservado su servicio para ser todos los martes 1:00 p. m. quincenal
Por lo tanto, el usuario X recibirá su servicio el viernes a las 10:00 a.m. (cada semana) y el usuario Y recibirá su servicio el martes a la 1:00 p.m. (cada dos semanas)
la solicitud es:
cree una matriz para cada fecha futura que muestre cuántos usuarios han reservado un intervalo de tiempo específico, por ejemplo:
martes 07-06-2021 | Miércoles 07-07-2021 | Jueves 07-08-2021 | Viernes 07-09-2021 | Sábado 07-10-2021 | Domingo 07-11-2021 | Lunes 07-12-2021 | martes 13-07-2021 | Miércoles 07-14-2021 | Jueves 15-07-2021 | Viernes 07-16-2021 | Sábado 17-17-2021 | Domingo 18-07-2021 | Lunes 19-07-2021 | martes 20-07-2021 | Miércoles 07-21-2021 | Jueves 22-07-2021 | Viernes 23-07-2021 | ||||
10:00 A.M | 1 usuario | 1 usuario | 1 usuarios | ||||||||||||||||||
11 A.M | |||||||||||||||||||||
12:00 PM | |||||||||||||||||||||
13:00 | 1 usuario | 1 usuario |
como puede ver, las fechas están en el futuro y no existen en nuestra base de datos,
los datos que tengo son:
-ID de usuario
-día laborable
-tiempo
-fecha de servicio (los datos se mostrarán una vez que haya pasado la fecha de servicio, si la fecha aún no ha llegado, los datos serán NULL)
ex para la tabla:
ID de usuario | Día laborable | Tiempo | Fecha de publicación | frecuencia |
124 | Tusday | 6:00 p. M. | 27/6/2021 | semanalmente |
567 | viernes | 11 A.M | NULO | semanalmente |
566 | domingo | 16:00 | NULO | quincenal |
433 | viernes | 3:00 PM | NULO | quincenal |
Entonces, ¿cómo puedo contar el total de usuarios que reservaron un servicio cada día de la semana (semanal / quincenal) para las fechas futuras?
ERD
Hola @lawada, ¿cuál es la fecha de inicio del caso de frecuencia quincenal?
lawada
En respuesta a ERD
es como un calendario, suponga que comienza a partir de hoy, si un usuario tiene una frecuencia quincenal todos los martes a las 10:00 a.m., entonces este usuario debe contarse con el martes 13/07/2021 10:00 a.m. – 27/07/2021 10:00 AM- 08/10/2021 10:00 AM y así sucesivamente.
ERD
En respuesta a lawada
@lawada,
Necesita tener tablas de fecha y hora.
No sé cómo se ven sus datos reales y si su tabla de ejemplo tiene las mismas columnas que en el escenario real, por lo que no estoy seguro de si es el mejor enfoque en su caso, pero puede intentar jugar con esto la medida:
Measure =
VAR frequency = MAX ( T[frequency] )
VAR countUsers =
CALCULATE (
DISTINCTCOUNT ( T[User ID] ),
CROSSFILTER ( 'Weekday'[Day Name], 'Date'[Day Name], BOTH ),
CROSSFILTER ( T[Week day], 'Weekday'[Day Name], BOTH )
)
RETURN
SWITCH (
TRUE (),
frequency = "weekly", countUsers,
frequency = "biweekly", IF ( ISEVEN ( MAX ( 'Date'[Week of Year] ) ), "", countUsers ),
""
)
Si esta publicación ayuda, considere Acéptalo como la solución ✔️para ayudar a los demás miembros a encontrarlo más rápidamente.
lawada
En respuesta a ERD
Noté que creó una relación 1: 1 entre la tabla de tiempos y la tabla Tl6, sin embargo, en la tabla de la fuente de datos el tiempo no es una clave única, muchos usuarios pueden tener timimgs similares, por lo que la relación en este caso sería 1: *
ERD
En respuesta a lawada
@lawada,
Concerniente a 1: * relación con la tabla de tiempos – está bien. Aquí es 1: 1 debido a los datos en sí.
No puedo compartir el archivo, pero puedo compartir los scripts de PQ:
1 vez
let
Source = List.Times(#time(0,0,0),24*60*60,#duration(0,0,0,1)),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Time"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Time", type time}}),
#"Inserted Start of Hour" = Table.AddColumn(#"Changed Type", "Start of Hour", each Time.StartOfHour([Time]), type time)
in
#"Inserted Start of Hour"
2) Fecha
let
Today=Date.From(DateTime.LocalNow()), // today's date
FromYear = 2020, // set the start year of the date dimension. dates start from 1st of January of this year
ToYear=2022, // set the end year of the date dimension. dates end at 31st of December of this year
FromDate=#date(FromYear,1,1),
ToDate=#date(ToYear,12,31),
Source=List.Dates(
FromDate,
Duration.Days(ToDate-FromDate)+1,
#duration(1,0,0,0)
),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Date", type date}}),
#"Inserted Year" = Table.AddColumn(#"Changed Type", "Year", each Date.Year([Date]), Int64.Type),
#"Inserted Month" = Table.AddColumn(#"Inserted Year", "Month", each Date.Month([Date]), Int64.Type),
#"Inserted Day Name" = Table.AddColumn(#"Inserted Month", "Day Name", each Date.DayOfWeekName([Date]), type text),
#"Inserted Day of Week" = Table.AddColumn(#"Inserted Day Name", "Day of Week", each Date.DayOfWeek([Date]), Int64.Type),
#"Inserted Month Name" = Table.AddColumn(#"Inserted Day of Week", "Month Name", each Date.MonthName([Date]), type text),
#"Added Custom4" = Table.AddColumn(#"Inserted Month Name", "Month Year", each Text.Start([Month Name], 3) & "-" & Text.End(Text.From([Year]),2)),
#"Inserted Week of Year" = Table.AddColumn(#"Added Custom4", "Week of Year", each Date.WeekOfYear([Date]), Int64.Type)
in
#"Inserted Week of Year"
3) Día de la semana
Si esta publicación ayuda, considere Acéptalo como la solución ✔️para ayudar a los demás miembros a encontrarlo más rápidamente.
lawada
En respuesta a ERD
¡Gracias por compartir los códigos PQ! pero una duda es, ¿cómo creaste la columna?
'Date'[Week of Year]
ya que no se agrega dentro de la tabla de fechas, ¿puede explicar cómo funciona esta línea en la medida que creó?
frequency = "biweekly", IF ( ISEVEN ( MAX ( 'Date'[Week of Year] ) ), "", countUsers ),
ERD
En respuesta a lawada
@lawada, por favor, revisa nuevamente el script. Agregué la última línea de código.
Detalles:
Como deseaba comenzar a calcular a partir de hoy, miré el número de la semana actual, si es par o no. Y luego usé la función https://dax.guide/iseven/ para contar los valores cada dos semanas.
Si esta publicación ayuda, considere Acéptalo como la solución ✔️para ayudar a los demás miembros a encontrarlo más rápidamente.
lawada
En respuesta a ERD
muchas gracias por la ayuda, utilicé exactamente los mismos pasos en mi modelo de datos, sin embargo, el código dax no dio el mismo resultado, jugué e hice algunos cambios en el modelo de datos y dax y está funcionando ahora
lawada
En respuesta a ERD
¿Puedo tener el archivo power bi, por favor? o puede compartir el código dax que creó para la tabla de tiempos, la tabla de fechas y la tabla de días de la semana. gracias de antemano..