{"id":356,"date":"2019-02-18T14:22:00","date_gmt":"2019-02-18T13:22:00","guid":{"rendered":"https:\/\/trainingpowerbi.wordpress.com\/2018\/02\/22\/dimension-horaria-en-m\/"},"modified":"2020-09-08T13:57:11","modified_gmt":"2020-09-08T11:57:11","slug":"dimension-horaria-en-m","status":"publish","type":"post","link":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/","title":{"rendered":"Dimensi\u00f3n horaria en M"},"content":{"rendered":"<p>En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de <strong>nivel de granularidad diario<\/strong>, donde tendremos un registro por cada d\u00eda del periodo abarcado por dicha dimensi\u00f3n.<\/p>\n<p>Por otra parte, atributos relacionados con la dimensi\u00f3n horaria utilizados para describir los eventos de las tablas de hechos aparecen con mucha menor frecuencia. No obstante, en algunas ocasiones en las que el tiempo queda registrado con un nivel de detalle inferior al d\u00eda, la posibilidad de segmentar los datos por dichos atributos se convierte en uno de los temas principales a la hora de dise\u00f1ar un almac\u00e9n de datos anal\u00edtico.<\/p>\n<p>Este nivel de granularidad temporal, aunque m\u00e1s frecuente, no ser\u00e1 exclusivo de modelos cient\u00edficos que necesiten una especial precisi\u00f3n temporal en el registro de los eventos que pretenden analizar, sino que podemos encontrar f\u00e1cilmente casos, dentro del mundo empresarial, en los que la capacidad de filtrar los datos por<strong> atributos temporales de detalle inferior a un d\u00eda<\/strong> nos proporcionar\u00e1 un valor a\u00f1adido importante. Un ejemplo sencillo puede ser un restaurante, donde conocer las horas de mayor y menor afluencia de clientes ser\u00e1 clave en la toma de decisiones relacionadas con el manejo de los horarios del personal.<\/p>\n<p><!--more--><\/p>\n<p>En estos escenarios, donde tanto la fecha como la hora constituyen dimensiones relevantes, se hace necesario entender como modelar esta situaci\u00f3n de una forma que nos permita manejar eficientemente ambas dimensiones por separado y, a la vez, poder combinarlas cuando sea conveniente.<\/p>\n<p>En primer lugar, no debemos incluir informaci\u00f3n horaria dentro de la dimensi\u00f3n de fechas, ya que si queremos aprovechar las funcionalidades relativas al manejo del tiempo que nos ofrece <em>Power BI<\/em>, como el uso de las <strong>funciones de <em>time intelligence<\/em><\/strong>, debemos seguir las reglas del lenguaje DAX. Entre \u00e9stas se encuentra la obligatoriedad para la dimensi\u00f3n temporal de disponer de granularidad diaria, es decir, que cada registro de la misma corresponda a un d\u00eda en el calendario.<\/p>\n<p>Queremos conservar la potente utilidad de la dimensi\u00f3n temporal de fecha, y simult\u00e1neamente, proporcionar la <strong>capacidad de an\u00e1lisis hasta el nivel de minutos o segundos<\/strong> cuando as\u00ed lo consideremos apropiado. La soluci\u00f3n m\u00e1s sencilla y eficiente para conseguir dicho objetivo se basa en crear una dimensi\u00f3n de fecha y, separadamente, una dimensi\u00f3n horaria.<\/p>\n<p>De una manera muy similar a como creamos una dimensi\u00f3n temporal de granularidad diaria en un art\u00edculo anterior, vamos a crear ahora una dimensi\u00f3n horaria utilizando tambi\u00e9n <strong>el lenguaje M.<\/strong><\/p>\n<h4>Base de la consulta<\/h4>\n<p>Como primer paso, debemos <strong>definir la granularidad<\/strong> con la que queremos dotar a la dimensi\u00f3n. Salvo que sea estrictamente necesario, es aconsejable no incluir los segundos, ya que normalmente, en un proyecto de inteligencia de negocios de autoservicio no nos proporcionar\u00e1n informaci\u00f3n adicional relevante y porque el n\u00famero de registros aumenta enormemente, afectando al rendimiento del modelo. Por dichos motivos, vamos a escoger al minuto como la unidad m\u00e1s peque\u00f1a de nuestra dimensi\u00f3n.<\/p>\n<p>Como existe un n\u00famero fijo de minutos en un d\u00eda, que corresponde a 24h * 60min\/h = 1.440 minutos, no tenemos necesidad de crear par\u00e1metros que var\u00eden el resultado de la consulta cuando ejecutamos la funci\u00f3n, y por lo tanto nos bastar\u00e1 con definirla:<\/p>\n<p><code>let CrearDimensionHoraria = () as table =&gt;<\/code><\/p>\n<p>Ahora solo tenemos que ir <strong>generando las variables<\/strong> que formar\u00e1n parte de la consulta. Vamos a crear la variable que guarda el n\u00famero de minutos en un d\u00eda y por consiguiente, el n\u00famero de registros de la tabla y, utilizando la funci\u00f3n <code>List.Times()<\/code> , generaremos una lista continua de 1440 minutos, con un incremento de 1 minuto por cada registro:<\/p>\n<pre>let\n\u00a0 ContadorMinutos = 1440,\n\u00a0 Origen = List.Times(#time(0, 0, 0),ContadorMinutos, #duration(0,0,1,0)),<\/pre>\n<p>Si ejecutamos la consulta, ya tendr\u00edamos la lista creada:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-687 size-full\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-5-1.png?resize=629%2C333&#038;ssl=1\" alt=\"\" width=\"629\" height=\"333\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-5-1.png?w=729&amp;ssl=1 729w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-5-1.png?resize=300%2C159&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/p>\n<h4><\/h4>\n<h4>Columnas adicionales<\/h4>\n<p>Para crear el <strong>conjunto de atributos descriptivos<\/strong> que nos permitir\u00e1n filtrar y segmentar nuestros datos, transformamos la lista en una tabla con la funci\u00f3n <code>Table.FromList()<\/code>, cambiamos el tipo de dato a &#8216;Hora&#8217; y cambiamos el nombre de la columna:<\/p>\n<pre>TablaDesdeLista = Table.FromList(Origen, Splitter.SplitByNothing()), \nTipoCambiado = Table.TransformColumnTypes(TablaDesdeLista,{{\"Column1\", type time}}),\nNombreCambiado = Table.RenameColumns(TipoCambiado,{{\"Column1\", \"Tiempo\"}})<\/pre>\n<p>Ahora definimos columnas para cada una de las unidades de tiempo a representar en la dimensi\u00f3n (hora y minuto):<\/p>\n<pre>HoraInsertada = Table.AddColumn(NombreCambiado, \"Hora\", each Time.StartOfHour([Tiempo])),\nMinutoInsertado = Table.AddColumn(HoraInsertada, \"Minuto\", each Time.Minute([Tiempo])),\nTipoHoraCambiado = Table.TransformColumnTypes(MinutoInsertado,{{\"Hora\", type time}}),<\/pre>\n<p>Solo nos queda a\u00f1adir los <strong>niveles de la jerarqu\u00eda temporal<\/strong> que nos sean \u00fatiles para el dise\u00f1o de las visualizaciones que formar\u00e1n nuestros informes. Si creamos una columna que clasifique los horarios por \u00abperiodos de tiempo\u00bb, deberemos definir tambi\u00e9n otra que nos permita ordenar dichos periodos. Es posible que, en funci\u00f3n del formato que tenga la columna con la informaci\u00f3n horaria en la tabla de hechos, necesitemos crear tambi\u00e9n una clave horaria, denominada &#8216;TiempoKey&#8217; en el modelo de este art\u00edculo, que nos servir\u00e1 para relacionar las 2 tablas:<\/p>\n<pre>CuartoHoraInsertado = Table.AddColumn(TipoHoraCambiado, \"Cuarto Hora\", each if [Minuto]&lt;15 then [Hora] else if [Minuto] &lt; 30 then Value.Add([Hora],#duration(0,0,15, 0)) else if [Minuto] = 0 and [Hora Numero] = 3 and [Hora Numero] = 10 and [Hora Numero] = 12 and [Hora Numero] = 16 and [Hora Numero] = 0 and [Hora Numero] = 3 and [Hora Numero] = 10 and [Hora Numero] = 12 and [Hora Numero] = 16 and [Hora Numero] &lt; 20 then 4 else 5),\nTiempoKey = Table.AddColumn(InsertPeriodSort, \"TiempoKey\", each Time.ToText([Tiempo], \"HHmm\"), type text)\nin\nTiempoKey<\/pre>\n<h4>Consideraciones finales<\/h4>\n<p>De la forma en la que hemos creado<strong> dos dimensiones temporales separadas<\/strong> (una de fecha y una de hora) podremos segmentar nuestros datos por los atributos de cualquiera de las dos, funcionando las mismas como cualquier otra tabla de b\u00fasqueda en un modelo dimensional:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-691 size-full\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-12-1.png?resize=629%2C414&#038;ssl=1\" alt=\"\" width=\"629\" height=\"414\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-12-1.png?w=839&amp;ssl=1 839w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-12-1.png?resize=300%2C197&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-12-1.png?resize=768%2C505&amp;ssl=1 768w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/p>\n<p>Asimismo, podemos combinar ambas dimensiones de forma sencilla generando una <strong>jerarqu\u00eda de &#8216;Fecha\/Hora&#8217;,<\/strong> colocando los atributos del elemento &#8216;Tiempo&#8217; debajo de los del elemento &#8216;Fecha&#8217; en una visualizaci\u00f3n, de forma que el usuario pueda explorar los datos a lo largo de toda la jerarqu\u00eda, desde a\u00f1o &gt; trimestre &gt; mes &gt; d\u00eda &gt; hora &gt; minuto, sin importar que los atributos pertenezcan a dimensiones separadas:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-692 size-full\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-7-1.png?resize=175%2C194&#038;ssl=1\" alt=\"\" width=\"175\" height=\"194\" \/><\/p>\n<p>Tambi\u00e9n podemos a\u00f1adir columnas calculadas con DAX para crear otros atributos descriptivos que puedan ser \u00fatiles a los usuarios a la hora de explorar los datos. Por ejemplo, podemos generar una columna que permita segmentar o filtrar los datos por cada hora del d\u00eda expresando el intervalo de forma clara:<\/p>\n<p>RangoHorario\u00a0=<br \/>\n<span class=\"Keyword\" style=\"color: #0070ff;\">FORMAT<\/span><span class=\"Parenthesis\" style=\"color: #969696;\">\u00a0(<\/span>\u00a0[Hora];\u00a0<span class=\"StringLiteral\" style=\"color: #d93124;\">\u00abShort\u00a0Time\u00bb<\/span>\u00a0<span class=\"Parenthesis\" style=\"color: #969696;\">)<\/span>\u00a0&amp;\u00a0<span class=\"StringLiteral\" style=\"color: #d93124;\">\u00bb\u00a0&#8211;\u00a0\u00ab<\/span><br \/>\n&amp;\u00a0<span class=\"Keyword\" style=\"color: #0070ff;\">FORMAT<\/span><span class=\"Parenthesis\" style=\"color: #969696;\">\u00a0(<\/span>\u00a0[Proxima\u00a0Hora];\u00a0<span class=\"StringLiteral\" style=\"color: #d93124;\">\u00abShort\u00a0Time\u00bb<\/span>\u00a0<span class=\"Parenthesis\" style=\"color: #969696;\">)<\/span><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-694 size-full\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-2-1.png?resize=629%2C209&#038;ssl=1\" alt=\"\" width=\"629\" height=\"209\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-2-1.png?w=840&amp;ssl=1 840w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-2-1.png?resize=300%2C100&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-2-1.png?resize=768%2C255&amp;ssl=1 768w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/p>\n<p>Ya tenemos todo listo para crear visualizaciones con una precisi\u00f3n temporal de hasta un minuto:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-693 size-full\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-4-1.png?resize=629%2C582&#038;ssl=1\" alt=\"\" width=\"629\" height=\"582\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-4-1.png?w=731&amp;ssl=1 731w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-4-1.png?resize=300%2C277&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/p>\n<h6><\/h6>\n<h6>C\u00f3digo completo<\/h6>\n<pre>let CrearDimensionHoraria = () as table =&gt;\nlet\nContadorMinutos = 1440,\nOrigen = List.Times(#time(0, 0, 0),ContadorMinutos, #duration(0,0,1,0)),\nTablaDesdeLista = Table.FromList(Origen, Splitter.SplitByNothing()), \n TipoCambiado = Table.TransformColumnTypes(TablaDesdeLista,{{\"Column1\", type time}}),\nNombreCambiado = Table.RenameColumns(TipoCambiado,{{\"Column1\", \"Tiempo\"}}),\nHoraInsertada = Table.AddColumn(NombreCambiado, \"Hora\", each Time.StartOfHour([Tiempo])),\nMinutoInsertado = Table.AddColumn(HoraInsertada, \"Minuto\", each Time.Minute([Tiempo])),\nTipoHoraCambiado = Table.TransformColumnTypes(MinutoInsertado,{{\"Hora\", type time}}),\nCuartoHoraInsertado = Table.AddColumn(TipoHoraCambiado, \"Cuarto Hora\", each if [Minuto]&lt;15 then [Hora] else if [Minuto] &lt; 30 then Value.Add([Hora],#duration(0,0,15, 0)) else if [Minuto] &lt; 45 then Value.Add([Hora],#duration(0,0,30, 0)) else Value.Add([Hora],#duration(0,0,45, 0))),\nTipoCuartoCambiado = Table.TransformColumnTypes(CuartoHoraInsertado,{{\"Cuarto Hora\", type time}}),\nHoraNumeroInsertada = Table.AddColumn(TipoCuartoCambiado, \"Hora Numero\", each Time.Hour([Tiempo])),\nProximaHora = Table.AddColumn(HoraNumeroInsertada, \"Proxima Hora\", each Value.Add([Hora],#duration(0,1,0, 0))),\nProximoCuartoHora = Table.AddColumn(ProximaHora, \"Proximo Cuarto Hora\", each Value.Add([Cuarto Hora],#duration(0,0,15, 0))),\nRangoHorarioInsertado = Table.AddColumn(ProximoCuartoHora, \"RangoHoras\", each Text.Combine({Text.From([Hora], \"es-ES\"), \" - \", Text.From([Proxima Hora], \"es-ES\")}), type text),\nRangoCuartosInsertado = Table.AddColumn(RangoHorarioInsertado, \"RangoCuartos\", each Text.Combine({Text.From([Cuarto Hora], \"es-ES\"), \" - \", Text.From([Proximo Cuarto Hora], \"es-ES\")}), type text),\nPeriodoInsertado = Table.AddColumn(RangoCuartosInsertado, \"Periodo del dia\", each \n if [Hora Numero] &gt;= 0 and [Hora Numero] &lt; 3 then \"Madrugada\" else \n if [Hora Numero] &gt;= 3 and [Hora Numero] &lt; 10 then \"Cerrado\" else\nif [Hora Numero] &gt;= 10 and [Hora Numero] &lt; 12 then \"Ma\u00f1ana\" else\nif [Hora Numero] &gt;= 12 and [Hora Numero] &lt; 16 then \"Mediodia\" else\nif [Hora Numero] &gt;= 16 and [Hora Numero] &lt; 20 then \"Tarde\" else \"Noche\"),\nOrdenadorPeriodoInsertado = Table.AddColumn(PeriodoInsertado, \"Ordenador Periodo\", each \n if [Hora Numero] &gt;= 0 and [Hora Numero] &lt; 3 then 6 else \n if [Hora Numero] &gt;= 3 and [Hora Numero] &lt; 10 then 1 else\nif [Hora Numero] &gt;= 10 and [Hora Numero] &lt; 12 then 2 else\nif [Hora Numero] &gt;= 12 and [Hora Numero] &lt; 16 then 3 else\nif [Hora Numero] &gt;= 16 and [Hora Numero] &lt; 20 then 4 else 5),\nTiempoKey = Table.AddColumn(OrdenadorPeriodoInsertado, \"TiempoKey\", each Time.ToText([Tiempo], \"HHmm\"), type text)\nin\nTiempoKey\nin\nCrearDimensionHoraria<\/pre>\n<blockquote><p><span style=\"color: #808080;\">Todo el c\u00f3digo DAX de este art\u00edculo ha sido formateado con<em> \u00abDAX Formatter\u00bb <\/em><\/span><br \/>\n<a href=\"http:\/\/www.daxformatter.com?utm_source=badge-dark&amp;utm_medium=ad&amp;utm_campaign=embed\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.daxformatter.com\/wp-content\/themes\/daxformatter\/images\/daxformatter-badge-small-dark.png?w=629\" alt=\"DAX Formatter by SQLBI\" \/><\/a><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2,4,5,6],"tags":[9,10,29,11,35,12,14,23,18,34],"post_series":[],"class_list":["post-356","post","type-post","status-publish","format-standard","hentry","category-arquitectura-de-datos","category-dax-power-pivot","category-inteligencia-de-tiempo","category-m-power-query","tag-dax","tag-editor-de-consultas","tag-etl","tag-inteligencia-de-negocios","tag-inteligencia-de-tiempo","tag-m","tag-power-bi","tag-power-pivot","tag-power-query","tag-time-intelligence"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Admin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Business Intelligence Controlling | La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Dimensi\u00f3n horaria en M | Business Intelligence Controlling\" \/>\n\t\t<meta property=\"og:description\" content=\"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-02-18T13:22:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-08T11:57:11+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Dimensi\u00f3n horaria en M | Business Intelligence Controlling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#article\",\"name\":\"Dimensi\\u00f3n horaria en M | Business Intelligence Controlling\",\"headline\":\"Dimensi\\u00f3n horaria en M\",\"author\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/bicontrolling.com\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/image-5-1.png?fit=729%2C386&ssl=1\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#articleImage\",\"width\":729,\"height\":386},\"datePublished\":\"2019-02-18T14:22:00+01:00\",\"dateModified\":\"2020-09-08T13:57:11+02:00\",\"inLanguage\":\"es-ES\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#webpage\"},\"articleSection\":\"Arquitectura de datos, DAX, Inteligencia de tiempo, M (Power Query), DAX, Editor de consultas, ETL, Inteligencia de negocios, Inteligencia de tiempo, M, Power BI, Power Pivot, Power Query, Time Intelligence\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#listItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/bicontrolling.com\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"name\":\"Arquitectura de datos\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"position\":2,\"name\":\"Arquitectura de datos\",\"item\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#listItem\",\"name\":\"Dimensi\\u00f3n horaria en M\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#listItem\",\"name\":\"Inicio\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#listItem\",\"position\":3,\"name\":\"Dimensi\\u00f3n horaria en M\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"name\":\"Arquitectura de datos\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\",\"name\":\"Business Intelligence Controlling\",\"description\":\"La nueva generaci\\u00f3n del reporting econ\\u00f3mico-financiero y el control de gesti\\u00f3n empresarial\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/admin\\\/\",\"name\":\"Admin\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#webpage\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/\",\"name\":\"Dimensi\\u00f3n horaria en M | Business Intelligence Controlling\",\"description\":\"En casi cualquier modelo de datos que dise\\u00f1emos ser\\u00e1 imprescindible disponer de una dimensi\\u00f3n temporal que nos permita filtrar y segmentar los valores num\\u00e9ricos de las tablas de hechos en funci\\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\\u00f3n temporal m\\u00e1s com\\u00fan y \\u00fatil corresponde a aquella de nivel de granularidad\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2019\\\/02\\\/18\\\/dimension-horaria-en-m\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2019-02-18T14:22:00+01:00\",\"dateModified\":\"2020-09-08T13:57:11+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#website\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/\",\"name\":\"Business Intelligence Controlling\",\"description\":\"La nueva generaci\\u00f3n del reporting econ\\u00f3mico-financiero y el control de gesti\\u00f3n empresarial\",\"inLanguage\":\"es-ES\",\"publisher\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Dimensi\u00f3n horaria en M | Business Intelligence Controlling","description":"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad","canonical_url":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#article","name":"Dimensi\u00f3n horaria en M | Business Intelligence Controlling","headline":"Dimensi\u00f3n horaria en M","author":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/bicontrolling.com\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-5-1.png?fit=729%2C386&ssl=1","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#articleImage","width":729,"height":386},"datePublished":"2019-02-18T14:22:00+01:00","dateModified":"2020-09-08T13:57:11+02:00","inLanguage":"es-ES","mainEntityOfPage":{"@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#webpage"},"isPartOf":{"@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#webpage"},"articleSection":"Arquitectura de datos, DAX, Inteligencia de tiempo, M (Power Query), DAX, Editor de consultas, ETL, Inteligencia de negocios, Inteligencia de tiempo, M, Power BI, Power Pivot, Power Query, Time Intelligence"},{"@type":"BreadcrumbList","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/#listItem","position":1,"name":"Inicio","item":"https:\/\/bicontrolling.com\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","name":"Arquitectura de datos"}},{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","position":2,"name":"Arquitectura de datos","item":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#listItem","name":"Dimensi\u00f3n horaria en M"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/#listItem","name":"Inicio"}},{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#listItem","position":3,"name":"Dimensi\u00f3n horaria en M","previousItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","name":"Arquitectura de datos"}}]},{"@type":"Organization","@id":"https:\/\/bicontrolling.com\/#organization","name":"Business Intelligence Controlling","description":"La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","url":"https:\/\/bicontrolling.com\/"},{"@type":"Person","@id":"https:\/\/bicontrolling.com\/index.php\/author\/admin\/#author","url":"https:\/\/bicontrolling.com\/index.php\/author\/admin\/","name":"Admin"},{"@type":"WebPage","@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#webpage","url":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/","name":"Dimensi\u00f3n horaria en M | Business Intelligence Controlling","description":"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/bicontrolling.com\/#website"},"breadcrumb":{"@id":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/#breadcrumblist"},"author":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/admin\/#author"},"creator":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/admin\/#author"},"datePublished":"2019-02-18T14:22:00+01:00","dateModified":"2020-09-08T13:57:11+02:00"},{"@type":"WebSite","@id":"https:\/\/bicontrolling.com\/#website","url":"https:\/\/bicontrolling.com\/","name":"Business Intelligence Controlling","description":"La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","inLanguage":"es-ES","publisher":{"@id":"https:\/\/bicontrolling.com\/#organization"}}]},"og:locale":"es_ES","og:site_name":"Business Intelligence Controlling | La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","og:type":"article","og:title":"Dimensi\u00f3n horaria en M | Business Intelligence Controlling","og:description":"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad","og:url":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/","article:published_time":"2019-02-18T13:22:00+00:00","article:modified_time":"2020-09-08T11:57:11+00:00","twitter:card":"summary","twitter:title":"Dimensi\u00f3n horaria en M | Business Intelligence Controlling","twitter:description":"En casi cualquier modelo de datos que dise\u00f1emos ser\u00e1 imprescindible disponer de una dimensi\u00f3n temporal que nos permita filtrar y segmentar los valores num\u00e9ricos de las tablas de hechos en funci\u00f3n de los atributos temporales que nos interesen en cada momento. La dimensi\u00f3n temporal m\u00e1s com\u00fan y \u00fatil corresponde a aquella de nivel de granularidad"},"aioseo_meta_data":{"post_id":"356","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-31 11:40:50","updated":"2025-06-04 11:51:54","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bicontrolling.com\/\" title=\"Inicio\">Inicio<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/\" title=\"Arquitectura de datos\">Arquitectura de datos<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tDimensi\u00f3n horaria en M\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Inicio","link":"https:\/\/bicontrolling.com\/"},{"label":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},{"label":"Dimensi\u00f3n horaria en M","link":"https:\/\/bicontrolling.com\/index.php\/2019\/02\/18\/dimension-horaria-en-m\/"}],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1769,"url":"https:\/\/bicontrolling.com\/index.php\/2020\/12\/09\/crear-dimension-horaria-en-dax\/","url_meta":{"origin":356,"position":0},"title":"Crear dimensi\u00f3n horaria en DAX","author":"Admin","date":"9 diciembre, 2020","format":false,"excerpt":"Introducci\u00f3n En una entrada anterior vimos c\u00f3mo, en escenarios donde tanto los atributos relacionados con la fecha como los relacionados con la hora son relevantes para el an\u00e1lisis que queremos realizar, pod\u00edamos crear una dimensi\u00f3n horaria en M que nos sirviera para filtrar y segmentar nuestras medidas en funci\u00f3n de\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/12\/Imagen-34.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/12\/Imagen-34.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/12\/Imagen-34.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/12\/Imagen-34.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1938,"url":"https:\/\/bicontrolling.com\/index.php\/2021\/11\/26\/hasta-el-ultimo-segundo-en-power-bi\/","url_meta":{"origin":356,"position":1},"title":"Hasta el \u00faltimo segundo en Power BI","author":"Admin","date":"26 noviembre, 2021","format":false,"excerpt":"Video de mi participaci\u00f3n en Power Platform Madrid, con una sesi\u00f3n sobre la creaci\u00f3n y el uso de una dimensi\u00f3n horaria que nos permita analizar nuestros hechos a granularidades inferiores al d\u00eda. https:\/\/www.youtube.com\/watch?v=UViZ3lzLxrE","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/UViZ3lzLxrE\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":760,"url":"https:\/\/bicontrolling.com\/index.php\/2018\/12\/13\/header-detail\/","url_meta":{"origin":356,"position":2},"title":"Estructuras jer\u00e1rquicas en tablas de hechos","author":"Admin","date":"13 diciembre, 2018","format":false,"excerpt":"Introducci\u00f3n Un escenario muy frecuente cuando utilizamos bases de datos relacionales como origen principal de un modelo que reproduce un proceso de negocio, como pueden ser las ventas de una empresa, es encontrarnos con dos tablas de hechos con distinta granularidad para describir el mismo proceso. Una de ellas contendr\u00e1\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/03\/image-7-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/03\/image-7-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/03\/image-7-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/03\/image-7-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":430,"url":"https:\/\/bicontrolling.com\/index.php\/2020\/02\/20\/desnormalizando-consultas-de-forma-eficiente-2\/","url_meta":{"origin":356,"position":3},"title":"Desnormalizando dimensiones de forma eficiente","author":"Admin","date":"20 febrero, 2020","format":false,"excerpt":"Como vimos en una entrada anterior, cuando dise\u00f1amos un modelo de datos anal\u00edtico, el enfoque principal debe situarse en lograr un dise\u00f1o que favorezca la simplicidad en la exploraci\u00f3n y agregaci\u00f3n de los datos, a la vez que en obtener un rendimiento \u00f3ptimo en la realizaci\u00f3n de consultas. Las estructuras\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/09\/image-31-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/09\/image-31-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/09\/image-31-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/09\/image-31-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":816,"url":"https:\/\/bicontrolling.com\/index.php\/2018\/08\/23\/medidas-semi-aditivas-en-dax\/","url_meta":{"origin":356,"position":4},"title":"Medidas semi-aditivas en DAX","author":"Admin","date":"23 agosto, 2018","format":false,"excerpt":"En cualquier sistema de BI, podemos crear c\u00e1lculos o medidas de 3 tipos distintos: Medidas aditivas: son generalmente la mayor parte de las medidas que nos encontraremos en un modelo de datos anal\u00edtico, y se caracterizan porque podemos usar la funci\u00f3n SUM() para agregar sus valores en funci\u00f3n de cualquier\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/04\/image-1-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/04\/image-1-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/04\/image-1-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/04\/image-1-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2059,"url":"https:\/\/bicontrolling.com\/index.php\/2023\/08\/31\/integridad-referencial-y-miembros-de\/","url_meta":{"origin":356,"position":5},"title":"Integridad referencial y miembros desconocidos en Power BI","author":"Admin","date":"31 agosto, 2023","format":false,"excerpt":"Introducci\u00f3n En este art\u00edculo vamos a explorar como se comporta Power BI cuando en un modelo de datos existen violaciones de la integridad referencial, y como podemos identificar y solventar este problema, a la vez que agrupamos los miembros desconocidos dot\u00e1ndolos de significado y garantizando la integridad de nuestro modelo.\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/image-1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/comments?post=356"}],"version-history":[{"count":12,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/356\/revisions"}],"predecessor-version":[{"id":1679,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/356\/revisions\/1679"}],"wp:attachment":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/media?parent=356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/categories?post=356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/tags?post=356"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/post_series?post=356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}