{"id":11908,"date":"2022-09-05T20:20:41","date_gmt":"2022-09-05T20:20:41","guid":{"rendered":"https:\/\/www.fditf.com\/bi\/?p=11908"},"modified":"2023-03-27T17:34:38","modified_gmt":"2023-03-27T17:34:38","slug":"como-funciona-datespine-en-dbt-dbt-utils-package","status":"publish","type":"post","link":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/","title":{"rendered":"C\u00f3mo funciona datespine en dbt (dbt utils package)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Una de las grandes ventajas de <a href=\"https:\/\/www.getdbt.com\/\">dbt<\/a> es que existen m\u00faltiples paquetes con soluciones a problemas comunes, mismos que puedes aprovechar en tus propios proyectos. En el paquete de <a href=\"https:\/\/github.com\/dbt-labs\/dbt-utils#date_spine-source\">dbt-utils<\/a> existen distintas macros que te pueden ayudar con el d\u00eda d\u00eda en la resoluci\u00f3n de problemas comunes en SQL. Una de las macros es <a href=\"https:\/\/github.com\/dbt-labs\/dbt-utils\/blob\/main\/macros\/sql\/date_spine.sql\">date_spine<\/a>, misma que genera una columna con una lista de fechas consecutivas en un per\u00edodo determinado. Por ejemplo, si quisieras generar la serie de fechas de todo 2020, la macro quedar\u00eda as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{{ dbt_utils.date_spine(\r\n    datepart=\"day\",\r\n    start_date=\"cast('2020-01-01' as date)\",\r\n    end_date=\"cast('2021-01-01' as date)\"\r\n   )\r\n}}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De acuerdo a la documentaci\u00f3n, el argumento que pones como \u201cend_date\u201d no est\u00e1 incluido en la lista de fechas. De hecho, \u201cend_date\u201d es el d\u00eda posterior. Usando esa macro, obtienes esta lista:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"348\" src=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled.png\" alt=\"dbt date spine macro result\" class=\"wp-image-11925\" srcset=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled.png 330w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-284x300.png 284w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-256x270.png 256w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Funcionamiento de la macro datespine<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La l\u00f3gica para esta macro est\u00e1 disponible aqu\u00ed: <a href=\"https:\/\/github.com\/dbt-labs\/dbt-utils\/blob\/main\/macros\/sql\/date_spine.sql\"><\/a><a href=\"https:\/\/github.com\/dbt-labs\/dbt-utils\/blob\/main\/macros\/sql\/date_spine.sql\">https:\/\/github.com\/dbt-labs\/dbt-utils\/blob\/main\/macros\/sql\/date_spine.sql<\/a>. Traducido para este ejemplo en particular queda as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with\n    rawdata as (\n        with\n            p as (\n                select\n                    0 as generated_number\n                union all\n                select\n                    1\n            ),\n            unioned as (\n                select\n                            p0.generated_number * power(2, 0)\n                        +\n                            p1.generated_number * power(2, 1)\n                        +\n                            p2.generated_number * power(2, 2)\n                        +\n                            p3.generated_number * power(2, 3)\n                        +\n                            p4.generated_number * power(2, 4)\n                        +\n                            p5.generated_number * power(2, 5)\n                        +\n                            p6.generated_number * power(2, 6)\n                        +\n                            p7.generated_number * power(2, 7)\n                        +\n                            p8.generated_number * power(2, 8)\n                        + 1\n                        as generated_number\n\n                from p as p0\n                     cross join\n                     p as p1\n                     cross join\n                     p as p2\n                     cross join\n                     p as p3\n                     cross join\n                     p as p4\n                     cross join\n                     p as p5\n                     cross join\n                     p as p6\n                     cross join\n                     p as p7\n                     cross join\n                     p as p8\n            )\n\n        select *\n        from unioned\n        where\n            generated_number &lt;= 365\n        order by generated_number\n    ),\n\n    all_periods as (\n        select\n            (\n                datetime_add(\n                        cast(cast('2020-01-01' as date) as datetime),\n                        interval row_number() over (order by 1) - 1 day\n                    )\n                ) as date_day\n        from rawdata\n    ),\n\n    filtered as (\n        select *\n        from all_periods\n        where\n            date_day &lt;= cast('2021-01-01' as date)\n    )\n\nselect *\nfrom filtered\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y funciona de la siguiente manera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Crear punto de partida \u201cp\u201d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La primera parte del query genera un punto de partida, que en el query est\u00e1 designada como \u201cp\u201d. Est\u00e1 l\u00f3gica, de hecho est\u00e1 generada por otra macro &#8220;generate_series&#8221; dentro del mismo paquete de dbt (<a href=\"https:\/\/github.com\/dbt-labs\/dbt-utils\/blob\/main\/macros\/sql\/generate_series.sql\" target=\"_blank\" rel=\"noreferrer noopener\">ver referencia<\/a>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with\n    rawdata as (\n        with\n            p as (\n                select\n                    0 as generated_number\n                union all\n                select\n                    1\n            )\n        SELECT * FROM p\n    )\nselect *\nfrom rawdata\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"408\" height=\"544\" src=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-1.png\" alt=\"\" class=\"wp-image-11934\" srcset=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-1.png 408w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-1-225x300.png 225w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-1-203x270.png 203w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfPor qu\u00e9 un 0 y un 1? Para crear una plantilla que nos permita contar en binario. El siguiente paso es cruzar esta plantilla consigo misma para generar un &#8220;tablero&#8221; que nos permita hacer los conteos en binario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with\r\n    rawdata as (\r\n        with\r\n            p as (\r\n                select\r\n                    0 as generated_number\r\n                union all\r\n                select\r\n                    1\r\n            ),\r\n            unioned as (\r\n                select *\r\n                from p as p0\r\n                     cross join\r\n                     p as p1\r\n                     cross join\r\n                     p as p2\r\n                     cross join\r\n                     p as p3\r\n                     cross join\r\n                     p as p4\r\n                     cross join\r\n                     p as p5\r\n                     cross join\r\n                     p as p6\r\n                     cross join\r\n                     p as p7\r\n                     cross join\r\n                     p as p8\r\n            )\r\n\r\n        select *\r\n        from unioned\r\n\r\n    )\r\n\r\nselect *\r\nfrom rawdata<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El tablero se ve as\u00ed en una hoja de c\u00e1lculo: <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1W5-GW5MOhGJraaYJ4X74-5P0LHAJxeuP-_1P6FlzuSs\/edit#gid=176921942&amp;range=A1\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.google.com\/spreadsheets\/d\/1W5-GW5MOhGJraaYJ4X74-5P0LHAJxeuP-_1P6FlzuSs\/edit#gid=176921942&amp;range=A1<\/a>.Visto de manera simplificada, si solo se cruzara el query consigo mismo una vez, quedar\u00eda as\u00ed<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with\r\n    rawdata as (\r\n        with\r\n            p as (\r\n                select\r\n                    0 as generated_number\r\n                union all\r\n                select\r\n                    1\r\n            ),\r\n            unioned as (\r\n                select *\r\n                from p as p0\r\n                     cross join\r\n                     p as p1\r\n\r\n            )\r\n\r\n        select *\r\n        from unioned\r\n\r\n    )\r\n\r\nselect *\r\nfrom rawdata<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"471\" src=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/cruce0.png\" alt=\"\" class=\"wp-image-11955\" srcset=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/cruce0.png 545w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/cruce0-300x259.png 300w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/cruce0-312x270.png 312w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con este cruce podr\u00edamos <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1W5-GW5MOhGJraaYJ4X74-5P0LHAJxeuP-_1P6FlzuSs\/edit#gid=0&amp;range=A1:B1\" target=\"_blank\" rel=\"noreferrer noopener\">contar hasta desde 0 hasta 3<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"317\" height=\"139\" src=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/image.png\" alt=\"\" class=\"wp-image-11960\" srcset=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/image.png 317w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/image-300x132.png 300w\" sizes=\"auto, (max-width: 317px) 100vw, 317px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cruzando el query 8 veces (como ocurre en el query que genera la plantilla), podemos llegar hasta el 511:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">511 = 2<sup>0<\/sup> + 2<sup>1<\/sup> + 2<sup>2<\/sup> + 2<sup>3<\/sup> + 2<sup>4<\/sup> + 2<sup>5<\/sup> + 2<sup>6<\/sup> + 2<sup>7<\/sup> + 2<sup>8<\/sup><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto es visible en el siguiente paso del query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with\r\n    rawdata as (\r\n        with\r\n            p as (\r\n                select\r\n                    0 as generated_number\r\n                union all\r\n                select\r\n                    1\r\n            ),\r\n            unioned as (\r\n                select\r\n                            p0.generated_number * power(2, 0)\r\n                        +\r\n                            p1.generated_number * power(2, 1)\r\n                        +\r\n                            p2.generated_number * power(2, 2)\r\n                        +\r\n                            p3.generated_number * power(2, 3)\r\n                        +\r\n                            p4.generated_number * power(2, 4)\r\n                        +\r\n                            p5.generated_number * power(2, 5)\r\n                        +\r\n                            p6.generated_number * power(2, 6)\r\n                        +\r\n                            p7.generated_number * power(2, 7)\r\n                        +\r\n                            p8.generated_number * power(2, 8)\r\n                        + 1\r\n                        as generated_number\r\n\r\n                from p as p0\r\n                     cross join\r\n                     p as p1\r\n                     cross join\r\n                     p as p2\r\n                     cross join\r\n                     p as p3\r\n                     cross join\r\n                     p as p4\r\n                     cross join\r\n                     p as p5\r\n                     cross join\r\n                     p as p6\r\n                     cross join\r\n                     p as p7\r\n                     cross join\r\n                     p as p8\r\n            )\r\n\r\n        select *\r\n        from unioned\r\n        where\r\n            generated_number &lt;= 365\r\n        order by generated_number\r\n    )\r\nselect *\r\nfrom rawdata<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esta operaci\u00f3n es la misma que en esta hoja de c\u00e1lculo: <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1W5-GW5MOhGJraaYJ4X74-5P0LHAJxeuP-_1P6FlzuSs\/edit#gid=1546948972&amp;range=T4\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.google.com\/spreadsheets\/d\/1W5-GW5MOhGJraaYJ4X74-5P0LHAJxeuP-_1P6FlzuSs\/edit#gid=1546948972&amp;range=T4<\/a>. Y aplicando el filtro (&#8220;where&#8221;) y ordenando, se obtiene una lista del 1 al 365. Cuando el rango es extendido, la macro para generar la serie extiende esta lista para admitir fechas m\u00e1s all\u00e1 del mismo a\u00f1o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con esta lista como base (rawdata), se calculan las fechas (partiendo de la fecha inicial), y se limita por la fecha final:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\nall_periods as (\r\n        select\r\n            (\r\n                datetime_add(\r\n                        cast(cast('2019-01-01' as date) as datetime),\r\n                        interval row_number() over (order by 1) - 1 day\r\n                    )\r\n                ) as date_day\r\n        from rawdata\r\n    ),\r\n\r\n    filtered as (\r\n        select *\r\n        from all_periods\r\n        where\r\n            date_day &lt;= cast('2021-01-01' as date)\r\n    )\r\n\r\nselect *\r\nfrom filtered<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y as\u00ed obtienes el producto final:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"348\" src=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled.png\" alt=\"Date spine result dbt\" class=\"wp-image-11925\" srcset=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled.png 330w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-284x300.png 284w, https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/Untitled-256x270.png 256w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Una de las grandes ventajas de dbt es que existen m\u00faltiples paquetes con soluciones a problemas comunes, mismos que puedes aprovechar en tus propios proyectos. En el paquete de dbt-utils existen distintas macros que te pueden ayudar con el d\u00eda <a href=\"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":11991,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[252],"tags":[253],"class_list":["post-11908","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dbt","tag-dbt"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C\u00f3mo funciona datespine en dbt (dbt utils package) - Business Intelligence MX<\/title>\n<meta name=\"description\" content=\"c\u00f3mo funciona la macro date spine en el paquete dbt utils, how the date spine macro works in the dbt utils package\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo funciona datespine en dbt (dbt utils package)\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo funciona datespine en dbt (dbt utils package)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/\" \/>\n<meta property=\"og:site_name\" content=\"Business Intelligence MX\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/excelyfinanzasmx\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-05T20:20:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-27T17:34:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png\" \/>\n\t<meta property=\"og:image:width\" content=\"433\" \/>\n\t<meta property=\"og:image:height\" content=\"336\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"V\u00edctor Urbina\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"C\u00f3mo funciona datespine en dbt (dbt utils package)\" \/>\n<meta name=\"twitter:description\" content=\"C\u00f3mo funciona datespine en dbt (dbt utils package)\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png\" \/>\n<meta name=\"twitter:creator\" content=\"@excelfinanzasMX\" \/>\n<meta name=\"twitter:site\" content=\"@excelfinanzasMX\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"V\u00edctor Urbina\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/\"},\"author\":{\"name\":\"V\u00edctor Urbina\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#\\\/schema\\\/person\\\/ff30cbd17d9f746cacb687d5332924c5\"},\"headline\":\"C\u00f3mo funciona datespine en dbt (dbt utils package)\",\"datePublished\":\"2022-09-05T20:20:41+00:00\",\"dateModified\":\"2023-03-27T17:34:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/\"},\"wordCount\":437,\"publisher\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/date-spine-dbt-utils.png\",\"keywords\":[\"dbt\"],\"articleSection\":[\"dbt\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/\",\"url\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/\",\"name\":\"C\u00f3mo funciona datespine en dbt (dbt utils package) - Business Intelligence MX\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/date-spine-dbt-utils.png\",\"datePublished\":\"2022-09-05T20:20:41+00:00\",\"dateModified\":\"2023-03-27T17:34:38+00:00\",\"description\":\"c\u00f3mo funciona la macro date spine en el paquete dbt utils, how the date spine macro works in the dbt utils package\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/date-spine-dbt-utils.png\",\"contentUrl\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/date-spine-dbt-utils.png\",\"width\":433,\"height\":336,\"caption\":\"date spine dbt utils package\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/dbt\\\/como-funciona-datespine-en-dbt-dbt-utils-package\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo funciona datespine en dbt (dbt utils package)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#website\",\"url\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/\",\"name\":\"Business Intelligence MX\",\"description\":\" \",\"publisher\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#organization\",\"name\":\"FDI Tecnolog\u00eda y Finanzas, SAS de CV\",\"url\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"http:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2018\\\/01\\\/logo.png\",\"contentUrl\":\"http:\\\/\\\/www.fditf.com\\\/bi\\\/wp-content\\\/uploads\\\/2018\\\/01\\\/logo.png\",\"width\":275,\"height\":168,\"caption\":\"FDI Tecnolog\u00eda y Finanzas, SAS de CV\"},\"image\":{\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/excelyfinanzasmx\\\/\",\"https:\\\/\\\/x.com\\\/excelfinanzasMX\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/#\\\/schema\\\/person\\\/ff30cbd17d9f746cacb687d5332924c5\",\"name\":\"V\u00edctor Urbina\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g\",\"caption\":\"V\u00edctor Urbina\"},\"url\":\"https:\\\/\\\/www.fditf.com\\\/bi\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo funciona datespine en dbt (dbt utils package) - Business Intelligence MX","description":"c\u00f3mo funciona la macro date spine en el paquete dbt utils, how the date spine macro works in the dbt utils package","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/","og_locale":"en_US","og_type":"article","og_title":"C\u00f3mo funciona datespine en dbt (dbt utils package)","og_description":"C\u00f3mo funciona datespine en dbt (dbt utils package)","og_url":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/","og_site_name":"Business Intelligence MX","article_publisher":"https:\/\/www.facebook.com\/excelyfinanzasmx\/","article_published_time":"2022-09-05T20:20:41+00:00","article_modified_time":"2023-03-27T17:34:38+00:00","og_image":[{"width":433,"height":336,"url":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","type":"image\/png"}],"author":"V\u00edctor Urbina","twitter_card":"summary_large_image","twitter_title":"C\u00f3mo funciona datespine en dbt (dbt utils package)","twitter_description":"C\u00f3mo funciona datespine en dbt (dbt utils package)","twitter_image":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","twitter_creator":"@excelfinanzasMX","twitter_site":"@excelfinanzasMX","twitter_misc":{"Written by":"V\u00edctor Urbina","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#article","isPartOf":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/"},"author":{"name":"V\u00edctor Urbina","@id":"https:\/\/www.fditf.com\/bi\/#\/schema\/person\/ff30cbd17d9f746cacb687d5332924c5"},"headline":"C\u00f3mo funciona datespine en dbt (dbt utils package)","datePublished":"2022-09-05T20:20:41+00:00","dateModified":"2023-03-27T17:34:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/"},"wordCount":437,"publisher":{"@id":"https:\/\/www.fditf.com\/bi\/#organization"},"image":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#primaryimage"},"thumbnailUrl":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","keywords":["dbt"],"articleSection":["dbt"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/","url":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/","name":"C\u00f3mo funciona datespine en dbt (dbt utils package) - Business Intelligence MX","isPartOf":{"@id":"https:\/\/www.fditf.com\/bi\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#primaryimage"},"image":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#primaryimage"},"thumbnailUrl":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","datePublished":"2022-09-05T20:20:41+00:00","dateModified":"2023-03-27T17:34:38+00:00","description":"c\u00f3mo funciona la macro date spine en el paquete dbt utils, how the date spine macro works in the dbt utils package","breadcrumb":{"@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#primaryimage","url":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","contentUrl":"https:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2022\/09\/date-spine-dbt-utils.png","width":433,"height":336,"caption":"date spine dbt utils package"},{"@type":"BreadcrumbList","@id":"https:\/\/www.fditf.com\/bi\/dbt\/como-funciona-datespine-en-dbt-dbt-utils-package\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fditf.com\/bi\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo funciona datespine en dbt (dbt utils package)"}]},{"@type":"WebSite","@id":"https:\/\/www.fditf.com\/bi\/#website","url":"https:\/\/www.fditf.com\/bi\/","name":"Business Intelligence MX","description":" ","publisher":{"@id":"https:\/\/www.fditf.com\/bi\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fditf.com\/bi\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.fditf.com\/bi\/#organization","name":"FDI Tecnolog\u00eda y Finanzas, SAS de CV","url":"https:\/\/www.fditf.com\/bi\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fditf.com\/bi\/#\/schema\/logo\/image\/","url":"http:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2018\/01\/logo.png","contentUrl":"http:\/\/www.fditf.com\/bi\/wp-content\/uploads\/2018\/01\/logo.png","width":275,"height":168,"caption":"FDI Tecnolog\u00eda y Finanzas, SAS de CV"},"image":{"@id":"https:\/\/www.fditf.com\/bi\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/excelyfinanzasmx\/","https:\/\/x.com\/excelfinanzasMX"]},{"@type":"Person","@id":"https:\/\/www.fditf.com\/bi\/#\/schema\/person\/ff30cbd17d9f746cacb687d5332924c5","name":"V\u00edctor Urbina","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/82af8163ed1a344c7fe2a709c29fea445dbf06cd4321465c3fdcc146da0403c4?s=96&d=mm&r=g","caption":"V\u00edctor Urbina"},"url":"https:\/\/www.fditf.com\/bi\/author\/admin\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/posts\/11908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/comments?post=11908"}],"version-history":[{"count":6,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/posts\/11908\/revisions"}],"predecessor-version":[{"id":11997,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/posts\/11908\/revisions\/11997"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/media\/11991"}],"wp:attachment":[{"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/media?parent=11908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/categories?post=11908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fditf.com\/bi\/wp-json\/wp\/v2\/tags?post=11908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}