Siéntete libre de divulgar nuestro espacio y códigos con tus amigos, necesitamos tu ayuda para aumentar esta comunidad.
Solución:
Desafortunadamente, no puedo comentar sobre la respuesta anterior, así que tengo que agregar esto como respuesta separada:
Sí, hay una forma de generar automáticamente tablas de fecha y hora. Aquí hay un código de ejemplo que utilizo en mis informes:
let
Source = List.Dates(startDate, Duration.Days(DateTime.Date(DateTime.LocalNow()) - startDate)+1, #duration(1,0,0,0)),
convertToTable = Table.FromList(Source, Splitter.SplitByNothing(), "Date", null, ExtraValues.Error),
calcDateKey = Table.AddColumn(convertToTable, "DateKey", each Date.ToText([Date], "YYYYMMDD")),
yearIndex = Table.AddColumn(calcDateKey, "Year", each Date.Year([Date])),
monthIndex = Table.AddColumn(yearIndex, "MonthIndex", each Date.Month([Date])),
weekIndex = Table.AddColumn(monthIndex, "WeekIndex", each Date.WeekOfYear([Date])),
DayOfWeekIndex = Table.AddColumn(weekIndex, "DayOfWeekIndex", each Date.DayOfWeek([Date], 1)),
DayOfMonthIndex = Table.AddColumn(DayOfWeekIndex, "DayOfMonthIndex", each Date.Day([Date])),
Weekday = Table.AddColumn(DayOfMonthIndex, "Weekday", each Date.ToText([Date], "dddd")),
setDataType = Table.TransformColumnTypes(Weekday,"Date", type date, "DateKey", type text, "Year", Int64.Type, "MonthIndex", Int64.Type, "WeekIndex", Int64.Type, "DayOfWeekIndex", Int64.Type, "DayOfMonthIndex", Int64.Type, "Weekday", type text)
in
setDataType
Simplemente péguelo en una consulta vacía. El código usa un parámetro llamado startDate, por lo que debe asegurarse de tener algo similar en su lugar.
Y aquí está el fragmento de un calendario:
let
Source = List.Times(#time(0,0,0) , 1440, #duration(0,0,1,0)),
convertToTable = Table.FromList(Source, Splitter.SplitByNothing(), "DayTime", null, ExtraValues.Error),
createTimeKey = Table.AddColumn(convertToTable, "TimeKey", each Time.ToText([DayTime], "HHmmss")),
hourIndex = Table.AddColumn(createTimeKey, "HourIndex", each Time.Hour([DayTime])),
minuteIndex = Table.AddColumn(hourIndex, "MinuteIndex", each Time.Minute([DayTime])),
setDataType = Table.TransformColumnTypes(minuteIndex,"DayTime", type time, "TimeKey", type text, "HourIndex", Int64.Type, "MinuteIndex", Int64.Type)
in
setDataType
Si usa DateKey y TimeKey (como se sugiere en la primera respuesta) en su tabla de hechos, puede generar fácilmente la jerarquía de fecha / hora simplemente colocando el elemento de hora en la visualización debajo del elemento de fecha como esta fecha- jerarquía de tiempo
Querrá tablas de fecha y hora separadas. No desea poner la hora en la tabla de fechas, porque la hora se repite todos los días.
Una dimensión de tiempo es el mismo principio que una dimensión de fecha, excepto que en lugar de una fila para cada día, tendría una fila para cada minuto o cada segundo (dependiendo de qué tan exacto quiera ser; no recomendaría incluir el segundo a menos que lo necesitaba absolutamente, ya que aumenta enormemente la cantidad de filas que necesita, lo que afecta el rendimiento). No habría ninguna referencia a la fecha en el calendario.
P.ej
Time | Time Text| Hour | Minute | AM/PM
---------|----------|------|--------|------
12:00 AM | 12:00 AM | 12 | 00 | AM
12:01 AM | 12:01 AM | 12 | 01 | AM
12:02 AM | 12:02 AM | 12 | 02 | AM
... | ... | ... | ... | ...
Incluyo una columna de tiempo / texto ya que Power BI tiene la costumbre de agregar una fecha de 1899 a los tipos de datos de tiempo. Puede agregar otras columnas si también le serían útiles.
En su tabla de hechos, querrá dividir su columna de fecha y hora en columnas de fecha y hora separadas, de modo que pueda unir la fecha a la tabla de fechas y la hora a la tabla de horas. Es probable que el tiempo deba convertirse al minuto o segundo redondo más cercano para que cada vez en sus datos corresponda a una fila en su tabla de tiempo.
Vale la pena mantener pero ocultar el campo de fecha y hora original en sus datos en caso de que luego desee calcular duraciones que abarcan días.
En Power BI, agregaría el tiempo attribute (o la hora (y minuto) attribute) bajo el mes / día attributes en su eje para hacer un gráfico de columnas que se puede perforar desde año> trimestre> mes> día> hora> minuto. A Power BI no le importa que el attributes vienen de diferentes tablas.
Puede leer más sobre las dimensiones de tiempo aquí: http://www.kimballgroup.com/2004/02/design-tip-51-latest-thinking-on-time-dimension-tables/
Espero que esto ayude.
Mi enfoque fue crear una nueva columna con la fórmula dada:
=Format([],"hh:mm:ss")
Esto creará una nueva columna y ahora puede seleccionarla con your-datetime-column para crear un efecto de desglose.
Si entiendes que ha resultado de ayuda este post, te agradeceríamos que lo compartas con más entusiastas de la programación de esta manera contrubuyes a extender nuestra información.