- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 139)
Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase->prepareView(Array) (Line: 247)
Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 340)
Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'full') (Line: 24)
Drupal\node\NodeViewBuilder->buildComponents(Array, Array, Array, 'full') (Line: 282)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 239)
Drupal\Core\Entity\EntityViewBuilder->build(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7630e95f-e00f-4dfb-abf1-0b224c84a703') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7630e95f-e00f-4dfb-abf1-0b224c84a703') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7630e95f-e00f-4dfb-abf1-0b224c84a703') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7630e95f-e00f-4dfb-abf1-0b224c84a703') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7630e95f-e00f-4dfb-abf1-0b224c84a703') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'fd01114c-3b97-409e-8710-7cbb22f71a2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'fd01114c-3b97-409e-8710-7cbb22f71a2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'fd01114c-3b97-409e-8710-7cbb22f71a2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'fd01114c-3b97-409e-8710-7cbb22f71a2e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'fd01114c-3b97-409e-8710-7cbb22f71a2e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '8e8d5e55-8730-4a90-8af6-86be79e57404') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '8e8d5e55-8730-4a90-8af6-86be79e57404') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '8e8d5e55-8730-4a90-8af6-86be79e57404') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '8e8d5e55-8730-4a90-8af6-86be79e57404') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '8e8d5e55-8730-4a90-8af6-86be79e57404') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ebbcab68-19b0-4ec1-be8a-a135e76a1243') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ebbcab68-19b0-4ec1-be8a-a135e76a1243') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ebbcab68-19b0-4ec1-be8a-a135e76a1243') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ebbcab68-19b0-4ec1-be8a-a135e76a1243') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ebbcab68-19b0-4ec1-be8a-a135e76a1243') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '60cc0cf3-e832-4730-8586-c06bea8d4ff2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '60cc0cf3-e832-4730-8586-c06bea8d4ff2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '60cc0cf3-e832-4730-8586-c06bea8d4ff2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '60cc0cf3-e832-4730-8586-c06bea8d4ff2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '60cc0cf3-e832-4730-8586-c06bea8d4ff2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd0dc256f-380b-44f7-a617-7ea22d68799a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd0dc256f-380b-44f7-a617-7ea22d68799a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd0dc256f-380b-44f7-a617-7ea22d68799a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd0dc256f-380b-44f7-a617-7ea22d68799a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd0dc256f-380b-44f7-a617-7ea22d68799a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'af26846a-2a33-44f8-a114-c48bb90ebf2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'af26846a-2a33-44f8-a114-c48bb90ebf2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'af26846a-2a33-44f8-a114-c48bb90ebf2e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'af26846a-2a33-44f8-a114-c48bb90ebf2e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'af26846a-2a33-44f8-a114-c48bb90ebf2e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'abb65bc8-733c-4fa3-8a80-78456963a052') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'abb65bc8-733c-4fa3-8a80-78456963a052') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'abb65bc8-733c-4fa3-8a80-78456963a052') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'abb65bc8-733c-4fa3-8a80-78456963a052') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'abb65bc8-733c-4fa3-8a80-78456963a052') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'c312ca92-8aa9-4f27-bdaa-52b419e33cc3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'c312ca92-8aa9-4f27-bdaa-52b419e33cc3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'c312ca92-8aa9-4f27-bdaa-52b419e33cc3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'c312ca92-8aa9-4f27-bdaa-52b419e33cc3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'c312ca92-8aa9-4f27-bdaa-52b419e33cc3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd809c2e8-de7c-4aef-9db2-a42169568079') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd809c2e8-de7c-4aef-9db2-a42169568079') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd809c2e8-de7c-4aef-9db2-a42169568079') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd809c2e8-de7c-4aef-9db2-a42169568079') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd809c2e8-de7c-4aef-9db2-a42169568079') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a8e26a08-0516-4447-8c2b-00b58950a088') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a8e26a08-0516-4447-8c2b-00b58950a088') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a8e26a08-0516-4447-8c2b-00b58950a088') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a8e26a08-0516-4447-8c2b-00b58950a088') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a8e26a08-0516-4447-8c2b-00b58950a088') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta versátil visualización, <strong>Synoptic Panel by OKViz</strong>, consta de dos herramientas: la primera se ofrece en un sitio web del desarrollador: <a href="https://synoptic.design/">https://synoptic.design</a>, en la que se puede subir una imagen para crear en ella diferentes áreas a las que vamos a asignar un identificador. La imagen puede ser de cualquier cosa: el plano de un edificio, el esquema de un motor, un mapa... Y vamos a identificar las áreas que nos interesen seleccionando sus esquinas, con una herramienta razonablemente intuitiva y fácil de usar. Una vez hayamos terminado con la creación de las áreas, descargaremos un fichero con el "mapa" que hemos creado y lo importaremos en nuestra visualización Power BI. La visualización también incluye mapas de ejemplo. Así, en la siguiente imagen se muestra el plano de una tienda que incluye 35 áreas predefinidas:
Como se trata de un mapa predefinido, las diferentes áreas están identificadas simplemente por un número, entre el 1 y el 35 en este caso. Los datos que alimentan el ejemplo anterior están almacenados en una hoja de cálculo y son los siguientes:
Cada fila es una venta (o un conjunto de operaciones de ventas), el <em>Área</em> es el área de la tienda en la que se ha realizado (valor entre 1 y 35), y se indica también la subcategoría de dichas ventas, el importe de las operaciones involucradas y un supuesto objetivo de ventas.
La configuración de la visualización ha sido la siguiente:
Es decir, simplemente hemos indicado el área al que pertenece cada fila (campo <em>Category</em> de la visualización) y la medida a mostrar (campo <em>Measure</em>).
Podemos mostrar en cada área una etiqueta con el área (en este caso, el número que las identifica), el valor de la métrica, el nombre del área (si hemos asignado alguno en la herramienta web comentada), y un par de combinaciones adicionales de estos valores (véase siguiente imagen). Esta configuración está accesible en <em>Formato > Data labels > Display</em>.
También podemos asignar colores aleatorios a cada una de las áreas (en <em>Formato > Data colors > Show all</em>), colores que podemos escoger también a mano:
Más útil puede resultar en ocasiones mostrar no colores discretos aleatorios, sino un degradado que indique el valor relativo de la métrica involucrada (<em>Formato > Data colors > Saturate</em>), pudiendo escoger el color base y las saturaciones mínima y máxima:
Si, en la configuración de la visualización añadimos un campo de nuestros datos al campo <em>Subcategory</em> de la visualización podemos mostrar nuestra métrica para cada una de esas "subcategorías". Sin embargo, tenemos que ser conscientes de que, desde el momento en el que añadimos dicho campo, la visualización deja de mostrar datos globales, y resulta necesario seleccionar una subcategoría de alguna forma para mostrar datos coherentes. En la siguiente imagen se ha seleccionado la subcategoría C2 en una segmentación:
Y hablo de datos "coherentes" puesto que, sino no se selecciona ninguna subcategoría, la visualización muestra datos que no se corresponden con ninguna subcategoría en concreto ni son los datos globales mostrados en las imágenes anteriores.
Si eliminamos el campo que hemos arrastrado a "<em>Subcategory</em>" y arrastramos nuestro campo "<em>Objective</em>" al campo "<em>Target</em>" de la visualización (aplicándose una suma como función de agregación), los colores de las diferentes áreas cambian para mostrar tonos diferentes en función de que se haya alcanzado o no el objetivo de cada área. Si no hemos aplicado la herramienta de saturación (<em>Formato > Data colors > Saturate</em>), simplemente se muestran en verde las áreas que han alcanzado el objetivo, y en negro las que no lo han hecho:
Si tuviésemos activada la herramienta de saturación, los verdes se mostrarían con diferentes saturaciones.
La configuración de la visualización incluye una práctica sección ("<em>Color Blindness by OKViz</em>") que limita los colores a usar de forma que sean fácilmente interpretables por personas con daltonismo.
En <em>Formato > States</em> es posible crear diferentes estados determinados por el valor de una métrica (que deberá arrastrarse al campo <em>States Measure</em> de la visualización). Para la creación de estos estados vamos a escoger un criterio de comparación (mayor que, menor que, etc.) y vamos a establecer manualmente los límites de cada área, escogiendo el color que la va a representar. Por ejemplo, en la siguiente imagen se han identificado tres áreas definidas por las ventas:
Ahora, la visualización muestra el color correspondiente de cada área en función del estado en el que se haya incluido (aquellas que no estén incluidas en ningún estado reciben el color por defecto):
Obsérvese que estos estados son determinados por una métrica que no tiene por qué ser la utilizada como métrica base en la visualización (campo <em>Measure</em>).
También es posible crear estos estados de forma automática arrastrando un campo con la métrica de interés a <em>States Measure</em> y otro con los objetivos a <em>States</em>:
Ahora la visualización muestra una gama de verdes (modificables) que indica el valor representado:
(Recuerda que, en este ejemplo, estamos trabajando con la misma métrica como base de la visualización y como criterio de creación de los estados, pero no tendría que ser así: podríamos estar mostrando en las áreas el total de ventas y creando los estados en función de, por ejemplo, el margen de ventas de cada área).
Puedes encontrar información adicional sobre el uso de los estados <a href="https://okviz.com/blog/states-in-custom-visuals/">en esta página web</a>.
Muy buena visualización, versátil y muy práctica.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Return type of Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 10 of modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php).
include('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 578)
Composer\Autoload\ClassLoader::Composer\Autoload\{closure}('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 432)
Composer\Autoload\ClassLoader->loadClass('Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet') (Line: 372)
google_analytics_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'google_analytics') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple() (Line: 126)
eu_cookie_compliance_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'eu_cookie_compliance') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)