Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
2 years ago
Solved

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"
  • Syndicate_Admin's avatar
    Syndicate_Admin
    2 years ago

    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

  • 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_Admin's avatar
        Syndicate_Admin
        Administrator

        Tú no. Deje que la configuración regional del explorador del cliente lo haga por usted.

  • 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

  • @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_Admin's avatar
      Syndicate_Admin
      Administrator

      Eso no ayudará, ya que "Local" para el servicio Power BI significa "UTC". Debe proporcionar el parámetro de desplazamiento.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        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