Forum Discussion
DMV MDSCHEMA_CUBES
¿Cómo puedo tener MDSCHEMA_CUBES en el DMV para devolver las marcas de tiempo en EST? Los resultados no coinciden en absoluto con el historial de actualización.
¿Sabe alguien1 por qué devuelve una marca de tiempo completamente diferente? Necesito que devuelva la misma marca de tiempo exat que el historial de actualización del conjunto de datos.
@jeffrey_wang @AlexisOlson @bcdobbs
Gracias de antemano.
@lbendlin esto es lo mejor que se me ocurrió, avísame si tienes algo mejor
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJRMDSyMjAAIgVHX6XYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type datetimezone}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each DateTimeZone.ToLocal([Column1])), #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type datetimezone}}) in #"Changed Type1"Hay una manera de convertir la marca de tiempo utc a la configuración regional del cliente.
$SYSTEM. MDSCHEMA_CUBES devuelve la marca de tiempo en UTC, ya que el servidor PBI está en UTC. El servidor de análisis tampoco tiene ninguna función de desplazamiento de servidor incorporada en DAX / MDX / DMV (estaría muy feliz de que se demostrara que estoy equivocado). Por lo tanto, no hay forma de utilizar ninguna función SSAS para convertir la zona horaria del servidor en una zona horaria preferida COMO MIGHTY SQL.
El primer paso es crear un datamart, incluso si no hay datos ingeridos en él. El propósito de este datamart es poder aprovechar el servidor SQL que viene con él, ya que SQL Server tiene funciones TIMEZONE integradas. Así que en mi caso lo haría así
let col = [dateTime] yr = Text.From(Date.Year(col)), month = Text.End("0"&Text.From(Date.Month(col)),2), day = Text.End("0"&Text.From(Date.Day(col)),2), hour = Text.End("0"&Text.From(Time.Hour(col)),2), minute = Text.End("0"&Text.From(Time.Minute(col)),2), second = Text.From(Time.Second(col)), val = yr&"-"&month&"-"&day&" "&hour&":"&minute&":"&second // 2024-05-31 17:07:41.373 // could I have avoided generating val in PQ? yes, if DMV had support for CAST/CONVERT /* BUT The query engine for DMVs is the Data Mining parser. The DMV query syntax is based on the SELECT (DMX) statement. Although DMV query syntax is based on a SQL SELECT statement, it does not support the full syntax of a SELECT statement. Notably, JOIN, GROUP BY, LIKE, CAST, and CONVERT are not supported.*/ /* hence, PQ is required to generate val */ in Sql.Database("server.datamart.fabric.microsoft.com", "db", [Query="select CONVERT(DATETIME,convert(datetime,'"&Text.From(val)&"') AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time') as t"])[t]{0}Y esto también se verifica en el servidor
13 Replies
- Syndicate_AdminAdministrator
El servicio Power BI se ejecuta en UTC. Basa todos tus informes en él también.
Estoy bastante seguro de que ni siquiera estás en EST, sino en EDT.
- Syndicate_AdminAdministrator
@lbendlin gr8 thnx, ¿sabes cómo puedo convertir este tinestamp a ttimestamp del cliente?
- Syndicate_AdminAdministrator
Tú no. Deje que la configuración regional del explorador del cliente lo haga por usted.
- Syndicate_AdminAdministrator
Hola, @smpa01
Controlar el horario de verano en Power Query, para una conversión más precisa que controle el horario de verano, puede usar la función DateTimeZone.SwitchZone, que puede tener en cuenta el horario de verano si especifica el identificador de zona horaria correcto.
= DateTimeZone.SwitchZone([LAST_DATA_UPDATE], -5, 0)Saludos
hackcrr
Si esta publicación ayuda, considere aceptarla como la solución y felicitaciones a esta publicación para ayudar a los otros miembros a encontrarla más rápidamente
- Syndicate_AdminAdministrator
@lbendlin esto es lo mejor que se me ocurrió, avísame si tienes algo mejor
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJRMDSyMjAAIgVHX6XYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type datetimezone}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each DateTimeZone.ToLocal([Column1])), #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type datetimezone}}) in #"Changed Type1"- Syndicate_AdminAdministrator
Eso no ayudará, ya que "Local" para el servicio Power BI significa "UTC". Debe proporcionar el parámetro de desplazamiento.
- Syndicate_AdminAdministrator
Esto funciona siempre y cuando se use en el modelo semántico y no en el flujo de datos. De este modo, se interpreta correctamente la configuración regional del cliente, pero se produce un error en el flujo de datos. Power BI debería haber proporcionado un método sin necesidad de que yo proporcionara explícitamente el tercer parámetro para DateTimeZone.SwitchZone