Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
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 ...
  • Syndicate_Admin's avatar
    2 years ago

    @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