Forum Discussion
DMV MDSCHEMA_CUBES
- 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" - 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
@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"Eso no ayudará, ya que "Local" para el servicio Power BI significa "UTC". Debe proporcionar el parámetro de desplazamiento.
- Syndicate_Admin2 years ago
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
- Syndicate_Admin2 years ago
Administrator
no hay ninguna "configuración regional de cliente" en un flujo de datos ni en un modelo semántico del servicio Power BI. Solo es aplicable en un archivo PBIX o Excel local.
- Syndicate_Admin2 years ago
Administrator
Sí, Iust se dio cuenta de que me había precipitado en esto. @lbendlin es correcto.