{"id":93053,"date":"2022-08-16T05:29:40","date_gmt":"2022-08-16T03:29:40","guid":{"rendered":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/"},"modified":"2020-10-20T15:46:25","modified_gmt":"2020-10-20T18:46:25","slug":"python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/","title":{"rendered":"python as an &quot;external tool&quot; for Power BI Desktop: Part 3: Virtual environments and TOM connection"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Modificar-toolpbitooljson-para-ejecutarse-en-un-entorno-python\" >Modificar [tool].pbitool.json para ejecutarse en un entorno python<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Entorno-base-raiz\" >Entorno base (ra\u00edz)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#%C2%BFQue-cambios\" >\u00bfQue cambios?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Entorno-virtual-con-nombre\" >Entorno virtual con nombre<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Conectarse-a-TOM\" >Conectarse a TOM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Obtener-metadatos-del-modelo-de-Power-BI-de-TOM\" >Obtener metadatos del modelo de Power BI de TOM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Proximamente-en-la-parte-4-uso-de-Jupyter-y-ejecucion-de-DAX\" >Pr\u00f3ximamente en la parte 4: uso de Jupyter y ejecuci\u00f3n de DAX<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#Me-gusta-esto\" >Me gusta esto:<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<div> <span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tiempo de leer: <\/span> <span class=\"rt-time\">5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span><\/p>\n<p>En una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9 por la configuraci\u00f3n principal.  Esta publicaci\u00f3n ampl\u00eda la configuraci\u00f3n b\u00e1sica de la herramienta externa que se encuentra en la Parte 2.<\/p>\n<p>Hay dos objetivos para esta publicaci\u00f3n:<br \/>1) Muestre c\u00f3mo ejecutar un script de python dentro de un entorno virtual<br \/>2) Con\u00e9ctese a una biblioteca .NET llamada Modelo de objetos tabulares (TOM) para obtener datos sobre un modelo de datos de Power BI Desktop actualmente abierto<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Modificar-toolpbitooljson-para-ejecutarse-en-un-entorno-python\"><\/span>Modificar [tool].pbitool.json para ejecutarse en un entorno python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>La parte 2 mostr\u00f3 c\u00f3mo ejecutar python.exe y ejecutar un script .py, pero no se ejecut\u00f3 en un entorno.  Esta limitaci\u00f3n permite scripts b\u00e1sicos, pero los scripts m\u00e1s complejos usan c\u00f3digo de otros m\u00f3dulos y paquetes.<\/p>\n<p>Para ampliar el ejemplo b\u00e1sico que se encuentra en la Parte 2, cre\u00e9 una muestra [tool]Archivo .pbitool.json (<a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"gist (opens in a new tab)\" href=\"https:\/\/gist.github.com\/deldersveld\/c920e7e1fe52e6d21d4d9d2608937a9b\">esencia<\/a>) que muestra c\u00f3mo ejecutar una secuencia de comandos de python en un entorno determinado.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Entorno-base-raiz\"><\/span>Entorno base (ra\u00edz)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Estoy usando Anaconda, que tiene un <strong>base<\/strong> ubicaci\u00f3n del entorno de C:  ProgramData  Anaconda3.<\/p>\n<pre class=\"wp-block-code\"><code>{\n  \"version\": \"1.0\",\n  \"name\": \"PyTOM\",\n  \"description\": \"Use python with Tabular Object Model\",\n  \"path\": \"C:ProgramDataAnaconda3python.exe\",\n  \"arguments\": \"C:\/ProgramData\/Anaconda3\/cwp.py C:\/ProgramData\/Anaconda3 C:ProgramDataAnaconda3python.exe C:\/[PATH TO PYTHON SCRIPT].py \"%server%\" \"%database%\"\",\n  \"iconData\": \"\"\n} <\/code><\/pre>\n<p>Tenga en cuenta que no es necesario cambiar nada con respecto al ejemplo de la Parte 2, excepto por la adici\u00f3n de algunos argumentos antes del script principal de python, el servidor y los valores de la base de datos.  Esto me tom\u00f3 algo de tiempo para trabajar con un <em>lote<\/em> de prueba y error, \u00a1as\u00ed que presta atenci\u00f3n!<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%C2%BFQue-cambios\"><\/span>\u00bfQue cambios?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li>El n\u00facleo <em>camino<\/em> sigue siendo su python.exe<\/li>\n<li>En lugar de ejecutar primero la secuencia de comandos deseada, los argumentos definen <strong>cwp.py <\/strong>primero, luego la ubicaci\u00f3n de su entorno, luego <em>otro<\/em> python.exe (prob\u00e9 muchas variaciones pero nunca logr\u00e9 que funcionara correctamente sin esta estructura).<\/li>\n<li>Despu\u00e9s de esa secuencia, los argumentos contin\u00faan con su script principal y las referencias de herramientas externas de Power BI para el servidor y la base de datos.<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"Entorno-virtual-con-nombre\"><\/span>Entorno virtual con nombre<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Para un entorno virtual aparte de la base, necesita modificar los argumentos para usar el entorno correcto.  Esto garantiza que los paquetes correctos que forman parte de ese entorno est\u00e9n disponibles para usar con su script de Power BI.<\/p>\n<p>Aqu\u00ed hay un ejemplo de un entorno conda llamado <strong>PowerBI<\/strong>.  Tenga en cuenta que la ubicaci\u00f3n de python.exe no <em>tener<\/em> cambiar al entorno conda (aunque podr\u00eda hacerlo), pero cambiar la parte del entorno del argumento es fundamental.<\/p>\n<pre class=\"wp-block-code\"><code>{\n  \"version\": \"1.0\",\n  \"name\": \"PyTOM\",\n  \"description\": \"Use python with Tabular Object Model\",\n  \"path\": \"C:ProgramDataAnaconda3python.exe\",\n  \"arguments\": \"C:\/ProgramData\/Anaconda3\/cwp.py  C:\/Users\/DavidEldersveld\/.conda\/envs\/PowerBI C:ProgramDataAnaconda3python.exe C:\/[PATH TO PYTHON SCRIPT].py \"%server%\" \"%database%\"\",\n  \"iconData\": \"\"\n} <\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Conectarse-a-TOM\"><\/span>Conectarse a TOM<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>los <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"Tabular Object Model (opens in a new tab)\" href=\"https:\/\/docs.microsoft.com\/en-us\/analysis-services\/tom\/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo\">Modelo de objeto tabular<\/a> La biblioteca (TOM) para .NET abre el modelo de datos de Power BI a herramientas externas.  Se requieren dos piezas para permitir que python interact\u00fae con .NET:<br \/>1) <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"Pythonnet (opens in a new tab)\" href=\"http:\/\/pythonnet.github.io\/\">Pythonnet<\/a> paquete para .NET CLR (pip install pythonnet)<br \/>2) <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"Python-SSAS (opens in a new tab)\" href=\"https:\/\/github.com\/yehoshuadimarsky\/python-ssas\">python-SSAS<\/a> m\u00f3dulo (ssas_api.py ubicado en la misma carpeta que el script principal que desea ejecutar)<\/p>\n<p>los <em>python-ssas (ssas_api.py)<\/em> El m\u00f3dulo python que facilita la conexi\u00f3n TOM es todo el trabajo de Josh Dimarsky, originalmente para consultar y procesar Analysis Services.  Simplemente lo reutilic\u00e9 para usarlo con Power BI Desktop o el punto final XMLA en Power BI Premium y lo extend\u00ed con algunos ejemplos relevantes.  Todo se basa en el m\u00f3dulo python de Josh, que tiene funciones para conectarse a TOM, ejecutar consultas DAX, etc.<\/p>\n<p>Este m\u00f3dulo en particular es solo <strong>uno<\/strong> posible forma de utilizar .NET CLR con python.  Por ejemplo, puede probar alternativas como <strong><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\".NetBridge (opens in a new tab)\" href=\"https:\/\/github.com\/tr8dr\/.Net-Bridge\/tree\/master\">.NetBridge<\/a><\/strong>  para ejecutar el <strong><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"pyDotNet (opens in a new tab)\" href=\"https:\/\/github.com\/tr8dr\/.Net-Bridge\/tree\/master\/src\/Python\/pyDotNet\">pyDotNet<\/a> <\/strong>empaquete y codifique su propia soluci\u00f3n para acceder a la DLL de TOM.  No he hecho un inventario de los diferentes m\u00e9todos disponibles para saber cu\u00e1l es el mejor o el m\u00e1s eficiente.  Sin embargo, el m\u00f3dulo ssas_api.py funcion\u00f3 directamente para lo que necesitaba, as\u00ed que me qued\u00e9 con \u00e9l.<\/p>\n<p>Siempre que Power BI Desktop est\u00e9 instalado, no deber\u00eda tener que obtener manualmente las DLL necesarias.  Podr\u00edas conseguirlos de <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/analysis-services\/client-libraries?view=azure-analysis-services-current\" aria-label=\"Microsoft directly (opens in a new tab)\">Microsoft directamente<\/a> aunque si es necesario.<\/p>\n<p>El c\u00f3digo de Josh en <em>ssas_api.py<\/em> carga Microsoft.AnalysisServices.Tabular.dll y Microsoft.AnalysisServices.AdomdClient.dll del GAC.<\/p>\n<figure class=\"wp-block-image size-large\"><img alt='image-8-6308357' data-attachment-id=\"8640\" data-permalink=\"https:\/\/dataveld.com\/2020\/07\/22\/python-as-an-external-tool-for-power-bi-desktop-part-3-virtual-environments-and-tom-connection\/image-8-4\/\" data-orig-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=782%2C810&amp;ssl=1\" data-orig-size=\"782,810\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image-8\" data-image-description=\"\" data-medium-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=290%2C300&amp;ssl=1\" data-large-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=640%2C663&amp;ssl=1\" src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357.png' alt=\"\" class=\"wp-image-8640 jetpack-lazy-image\" data-recalc-dims=\"1\" data-lazy-srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357-290x300.png 290w' data-lazy-sizes='(max-width: 640px) 100vw, 640px' data-lazy-src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357.png' srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-6308357-290x300.png 290w'><noscript><img alt='image-8-8428460' data-attachment-id=\"8640\" data-permalink=\"https:\/\/dataveld.com\/2020\/07\/22\/python-as-an-external-tool-for-power-bi-desktop-part-3-virtual-environments-and-tom-connection\/image-8-4\/\" data-orig-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=782%2C810&amp;ssl=1\" data-orig-size=\"782,810\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image-8\" data-image-description=\"\" data-medium-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=290%2C300&amp;ssl=1\" data-large-file=\"https:\/\/i1.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-8.png?fit=640%2C663&amp;ssl=1\" src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-8428460.png' alt=\"\" class=\"wp-image-8640\" srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-8428460.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-8-8428460-290x300.png 290w' sizes='(max-width: 640px) 100vw, 640px' data-recalc-dims=\"1\"><\/noscript><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Obtener-metadatos-del-modelo-de-Power-BI-de-TOM\"><\/span>Obtener metadatos del modelo de Power BI de TOM<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Con los diversos requisitos previos establecidos, puede codificar contra TOM.  El c\u00f3digo completo est\u00e1 al final de esta publicaci\u00f3n y <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" aria-label=\"this gist  (opens in a new tab)\" href=\"https:\/\/gist.github.com\/deldersveld\/5926c01f73e6ed56df8ca120ced81c0a\">esta esencia<\/a>, pero los elementos principales en las primeras 32 l\u00edneas:<br \/>1) importar el <em>ssas_api.py<\/em> m\u00f3dulo<br \/>2) defina una conexi\u00f3n al modelo de Power BI Desktop usando el <em>servidor <\/em>argumento pasado al hacer clic en el icono en Herramientas externas (conn = \u00abProveedor = MSOLAP; Fuente de datos =\u00bb + str (sys.argv[1]) + \u00ab; Cat\u00e1logo inicial =\u00bb; \u00bb  )<br \/>3) defina una consulta DAX \u00abfalsa\u00bb que ayude a cargar .NET (dax_string = &#8216;EVALUATE ROW (\u00abCargando ensamblados .NET\u00bb, 1)&#8217; <br \/>4) ejecuta la consulta DAX (df = powerbi.get_DAX (connection_string = conn, dax_string = dax_string) <br \/>5) completa las importaciones de TOM y AMOMD para python una vez que se cargan y se conecta a TOM<\/p>\n<pre class=\"wp-block-code\"><code>global System, DataTable, AMO, ADOMD\n\nimport System\nfrom System.Data import DataTable\nimport Microsoft.AnalysisServices.Tabular as TOM\nimport Microsoft.AnalysisServices.AdomdClient as ADOMD\n\nTOMServer = TOM.Server()\nTOMServer.Connect(conn) <\/code><\/pre>\n<p>Una vez conectado al modelo, el resto de mi secuencia de comandos python de muestra muestra c\u00f3mo cargar varios objetos de los metadatos del modelo en pandas DataFrames.  Solo est\u00e1 destinado a ser una muestra para ilustrar lo que podr\u00eda ser posible, pero podr\u00eda ampliarse para documentar todos los metadatos disponibles si se desea.<\/p>\n<figure class=\"wp-block-image size-large\"><img alt='image-9-2985989' data-attachment-id=\"8642\" data-permalink=\"https:\/\/dataveld.com\/2020\/07\/22\/python-as-an-external-tool-for-power-bi-desktop-part-3-virtual-environments-and-tom-connection\/image-9-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=1296%2C675&amp;ssl=1\" data-orig-size=\"1296,675\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image-9\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=300%2C156&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=640%2C333&amp;ssl=1\" src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989.png' alt=\"\" class=\"wp-image-8642 jetpack-lazy-image\" data-lazy-srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989-300x156.png 300w' data-lazy-sizes='(max-width: 640px) 100vw, 640px' data-lazy-src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989.png' srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-2985989-300x156.png 300w'><noscript><img alt='image-9-7788327' data-attachment-id=\"8642\" data-permalink=\"https:\/\/dataveld.com\/2020\/07\/22\/python-as-an-external-tool-for-power-bi-desktop-part-3-virtual-environments-and-tom-connection\/image-9-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=1296%2C675&amp;ssl=1\" data-orig-size=\"1296,675\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}' data-image-title=\"image-9\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=300%2C156&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/dataveld.com\/wp-content\/uploads\/2020\/07\/image-9.png?fit=640%2C333&amp;ssl=1\" src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-7788327.png' alt=\"\" class=\"wp-image-8642\" srcset='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-7788327.png 640w, https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/10\/image-9-7788327-300x156.png 300w' sizes='(max-width: 640px) 100vw, 640px'><\/noscript><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Proximamente-en-la-parte-4-uso-de-Jupyter-y-ejecucion-de-DAX\"><\/span>Pr\u00f3ximamente en la parte 4: uso de Jupyter y ejecuci\u00f3n de DAX<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>En la parte 4, ver\u00e1 c\u00f3mo crear un cuaderno de Jupyter con la informaci\u00f3n de conexi\u00f3n de Power BI disponible.<\/p>\n<p>Es posible que tambi\u00e9n haya notado <strong>get_DAX <\/strong>funci\u00f3n utilizada anteriormente para ayudar a cargar los ensamblados .NET requeridos.  Sin embargo, es mucho m\u00e1s poderoso que lo que se muestra aqu\u00ed.  Puede evaluar cualquier consulta DAX que desee escribir manualmente, copiar y pegar fuera de Power BI Desktop <em>Analizador de rendimiento<\/em>o copie y pegue de <em>Estudio DAX<\/em>.<\/p>\n<p>Como se vio en la Parte 1, las ventajas y los escenarios imaginativos de usar python con Power BI comienzan a aumentar con la capacidad de ejecutar DAX desde python.<\/p>\n<p>************************************************ **********************<\/p>\n<pre class=\"wp-block-preformatted\"><strong>FULL CODE<\/strong> <strong>for <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/gist.github.com\/deldersveld\/5926c01f73e6ed56df8ca120ced81c0a\">PowerBITOMSample.py<\/a> <\/strong><\/pre>\n<pre class=\"wp-block-code\"><code>import sys\n\nimport ssas_api as powerbi\nimport pandas as pd\n\nprint(\"Hit Enter to connect and say 'Hi TOM!'\")\ninput()\n\nprint('Power BI Desktop Connection')\nprint(str(sys.argv[1]))\nprint(str(sys.argv[2]))\n\nconn = \"Provider=MSOLAP;Data Source=\" + str(sys.argv[1]) + \";Initial Catalog='';\"\nprint(conn)\nprint()\n\ndax_string = 'EVALUATE ROW(\"Loading .NET assemblies\",1)'\ndf = powerbi.get_DAX(connection_string=conn, dax_string=dax_string)\n\nprint(\"Crossing the streams...\")\nglobal System, DataTable, AMO, ADOMD\n\nimport System\nfrom System.Data import DataTable\nimport Microsoft.AnalysisServices.Tabular as TOM\nimport Microsoft.AnalysisServices.AdomdClient as ADOMD\n\nprint(\"Reticulating splines...\")\nprint()\n\nTOMServer = TOM.Server()\nTOMServer.Connect(conn)\n\nprint(\"Hi TOM...\")\nprint()\n\n# Database info\nfor item in TOMServer.Databases:\n    print(\"Database: \", item.Name)\n    print(\"Compatibility Level: \", item.CompatibilityLevel) \n    print(\"Created: \", item.CreatedTimestamp)\n\nDatabaseId = str(sys.argv[2])\nPowerBIDatabase = TOMServer.Databases[DatabaseId]\n\nprint()\n\n# Define measure dataframe\ndfMeasures = pd.DataFrame(\n    columns=['Table',\n             'Name', \n             'Description', \n             'DataType', \n             'DataCategory',\n             'Expression',\n             'FormatString',\n             'DisplayFolder',\n             'Implicit',\n             'Hidden',\n             'ModifiedTime',\n             'State'])\n\n# Define column dataframe\ndfColumns = pd.DataFrame(\n    columns=['Table',\n             'Name'])\n\n# Tables\nprint(\"Listing tables...\")\nfor table in PowerBIDatabase.Model.Tables:\n    print(table.Name)\n\n    # Assign current table by name\n    CurrentTable = PowerBIDatabase.Model.Tables.Find(table.Name)\n\n    # print(type(CurrentTable))\n    # print(type(CurrentTable.Measures))\n\n    # Measures\n    for measure in CurrentTable.Measures:\n        new_row = {'Table':table.Name,\n                'Name':measure.Name, \n                'Description':measure.Description, \n                'DataType':measure.DataType,\n                'DataCategory':measure.DataCategory,\n                'Expression':measure.Expression,\n                'FormatString':measure.FormatString,\n                'DisplayFolder':measure.DisplayFolder,\n                'Implicit':measure.IsSimpleMeasure,\n                'Hidden':measure.IsHidden,\n                'ModifiedTime':measure.ModifiedTime,\n                'State':measure.State}\n        #print(new_row)\n        dfMeasures = dfMeasures.append(new_row, ignore_index=True)\n\n    # Columns\n    for column in CurrentTable.Columns:\n        new_row = {'Table':table.Name,\n                'Name':column.Name}\n        #print(column.Name)\n        dfColumns = dfColumns.append(new_row, ignore_index=True)\n\nprint(dfMeasures)\nprint(dfColumns)\n\ninput()<\/code><\/pre>\n<div class=\"sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded\" id=\"like-post-wrapper-143031883-8635-5f8f307b6e045\" data-src=\"https:\/\/widgets.wp.com\/likes\/#blog_id=143031883&amp;post_id=8635&amp;origin=dataveld.com&amp;obj_id=143031883-8635-5f8f307b6e045\" data-name=\"like-post-frame-143031883-8635-5f8f307b6e045\">\n<h3 class=\"sd-title\"><span class=\"ez-toc-section\" id=\"Me-gusta-esto\"><\/span>Me gusta esto:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"button\"><span>Me gusta<\/span><\/span> <span class=\"loading\">Cargando&#8230;<\/span><\/p>\n<p><span class=\"sd-text-color\"><\/span><a rel=\"nofollow noopener noreferrer\" target=\"_blank\" class=\"sd-link-color\"><\/a><\/div>\n<p>  Enlaces de pago<br \/><iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=qf_sp_asin_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1509306978&amp;asins=1509306978&amp;linkId=c966845d10380cc9612286c837e1eff6&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1735365203&amp;asins=1735365203&amp;linkId=f2b51a4f4352636df9b673b9286bd3f0&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1484234766&amp;asins=1484234766&amp;linkId=ec6c4c0205700fa545c561ec57479338&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1484248961&amp;asins=1484248961&amp;linkId=757de989158c946046e0fc289f1f1903&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1119282713&amp;asins=1119282713&amp;linkId=9de1fe1bb787374f663182180ceda158&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1119621496&amp;asins=1119621496&amp;linkId=7c73662f1ea5bb1d72f4a4d3bda385be&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=0470944889&amp;asins=0470944889&amp;linkId=837be67d6641ba75ceebebabf32411ad&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1119483891&amp;asins=1119483891&amp;linkId=a7160da414bc55941972f5ba598d26c1&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1119510775&amp;asins=1119510775&amp;linkId=1ed00bb353fb0348080863212320e053&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/ws-na.amazon-adsystem.com\/widgets\/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=tf_til&amp;ad_type=product_link&amp;tracking_id=dataveld-20&amp;marketplace=amazon&amp;region=US&amp;placement=1452128332&amp;asins=1452128332&amp;linkId=ff06fe30a769389f66db2c293ba02930&amp;show_border=false&amp;link_opens_in_new_window=true&amp;price_color=333333&amp;title_color=0066c0&amp;bg_color=ffffff\"> <\/iframe> <br \/>Como Asociado de Amazon, gano con las compras que califican.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Tiempo de leer: 5 minutos En una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9 por la configuraci\u00f3n principal. Esta&#8230;<\/p>","protected":false},"author":1,"featured_media":82053,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1359],"tags":[],"class_list":["post-93053","post","type-post","status-publish","format-standard","has-post-thumbnail","category-powerbi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>python como una &quot;herramienta externa&quot; para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"Tiempo de leer: 5 minutosEn una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"python como una &quot;herramienta externa&quot; para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM\" \/>\n<meta property=\"og:description\" content=\"Tiempo de leer: 5 minutosEn una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-16T03:29:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png\" \/>\n\t<meta property=\"og:image:width\" content=\"852\" \/>\n\t<meta property=\"og:image:height\" content=\"581\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"python como una \u00abherramienta externa\u00bb para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM\",\"datePublished\":\"2022-08-16T03:29:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/\"},\"wordCount\":1047,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/PyTom-7200178.png\",\"articleSection\":[\"Power BI\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/\",\"name\":\"python como una \\\"herramienta externa\\\" para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/PyTom-7200178.png\",\"datePublished\":\"2022-08-16T03:29:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"Tiempo de leer: 5 minutosEn una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/powerbi\\\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/PyTom-7200178.png\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/PyTom-7200178.png\",\"width\":852,\"height\":581,\"caption\":\"pytom-7200178-4940375-png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"python como una \"herramienta externa\" para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM - R Marketing Digital","description":"Time to read: 5 minutes In a previous post, I introduced some possible uses of python as an external tool for Power BI Desktop and passed","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:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/","og_locale":"en_US","og_type":"article","og_title":"python como una \"herramienta externa\" para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM","og_description":"Tiempo de leer: 5 minutosEn una publicaci\u00f3n anterior, present\u00e9 algunos usos posibles de python como una herramienta externa para Power BI Desktop y pas\u00e9","og_url":"https:\/\/rmarketingdigital.com\/en\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/","og_site_name":"R Marketing Digital","article_published_time":"2022-08-16T03:29:40+00:00","og_image":[{"width":852,"height":581,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png","type":"image\/png"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"python como una \u00abherramienta externa\u00bb para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM","datePublished":"2022-08-16T03:29:40+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/"},"wordCount":1047,"image":{"@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png","articleSection":["Power BI"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/","url":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/","name":"python como una \"herramienta externa\" para Power BI Desktop: Parte 3: entornos virtuales y conexi\u00f3n TOM - R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png","datePublished":"2022-08-16T03:29:40+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"Time to read: 5 minutes In a previous post, I introduced some possible uses of python as an external tool for Power BI Desktop and passed","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rmarketingdigital.com\/powerbi\/python-como-una-herramienta-externa-para-power-bi-desktop-parte-3-entornos-virtuales-y-conexion-tom\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/PyTom-7200178.png","width":852,"height":581,"caption":"pytom-7200178-4940375-png"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"R Digital Marketing","description":"SEO Agency | Advertising social networks | Community Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"R Digital Marketing","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts\/93053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/comments?post=93053"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts\/93053\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/media\/82053"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/media?parent=93053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/categories?post=93053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/tags?post=93053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}