- 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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->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: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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::$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('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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::$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('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->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: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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\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: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(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', 'insert-max_800_px-bdde7c1f-fe2a-4ff0-84b5-3cf6a84f5641') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-bdde7c1f-fe2a-4ff0-84b5-3cf6a84f5641') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-bdde7c1f-fe2a-4ff0-84b5-3cf6a84f5641') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-bdde7c1f-fe2a-4ff0-84b5-3cf6a84f5641') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-926feec9-b0dc-43db-bbbd-217fbed44a81') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-926feec9-b0dc-43db-bbbd-217fbed44a81') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-926feec9-b0dc-43db-bbbd-217fbed44a81') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-926feec9-b0dc-43db-bbbd-217fbed44a81') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2f8a6e83-8365-42e8-9124-155c2bd42684') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2f8a6e83-8365-42e8-9124-155c2bd42684') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2f8a6e83-8365-42e8-9124-155c2bd42684') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2f8a6e83-8365-42e8-9124-155c2bd42684') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-debc6675-5c97-473a-a04c-b59050566fc1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-debc6675-5c97-473a-a04c-b59050566fc1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-debc6675-5c97-473a-a04c-b59050566fc1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-debc6675-5c97-473a-a04c-b59050566fc1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-98524af3-a176-4440-9106-e2bfc7bdb516') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-98524af3-a176-4440-9106-e2bfc7bdb516') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-98524af3-a176-4440-9106-e2bfc7bdb516') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-98524af3-a176-4440-9106-e2bfc7bdb516') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-22a6e3b1-3740-41f1-8e27-5733bbe947aa') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-22a6e3b1-3740-41f1-8e27-5733bbe947aa') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-22a6e3b1-3740-41f1-8e27-5733bbe947aa') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-22a6e3b1-3740-41f1-8e27-5733bbe947aa') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-ab7a5072-ae87-4eab-8d74-706101e5181e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-ab7a5072-ae87-4eab-8d74-706101e5181e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-ab7a5072-ae87-4eab-8d74-706101e5181e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-ab7a5072-ae87-4eab-8d74-706101e5181e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1cbc3599-9688-4c1d-816d-e11ce29698b2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1cbc3599-9688-4c1d-816d-e11ce29698b2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1cbc3599-9688-4c1d-816d-e11ce29698b2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1cbc3599-9688-4c1d-816d-e11ce29698b2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-52c6aa55-cf51-43bb-8a29-71a7d22f1dac') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-52c6aa55-cf51-43bb-8a29-71a7d22f1dac') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-52c6aa55-cf51-43bb-8a29-71a7d22f1dac') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-52c6aa55-cf51-43bb-8a29-71a7d22f1dac') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7abbfd50-dd3c-477b-88fa-45f88d1d7edc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7abbfd50-dd3c-477b-88fa-45f88d1d7edc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7abbfd50-dd3c-477b-88fa-45f88d1d7edc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7abbfd50-dd3c-477b-88fa-45f88d1d7edc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1358892b-d527-4e7f-8102-9eb92b051487') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1358892b-d527-4e7f-8102-9eb92b051487') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1358892b-d527-4e7f-8102-9eb92b051487') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1358892b-d527-4e7f-8102-9eb92b051487') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa de formas</strong> o <strong>shape map</strong> es otra alternativa que Power BI ofrece para mostrar información en un mapa. En este caso tendremos que seleccionar el país al que representa el mapa (<em>Formato > Forma</em>, opción que no se muestra hasta que no llevamos algún campo al panel de configuración de la visualización), mostrándose en él los estados, provincias, condados... que lo forman con un color que dependerá del campo de nuestro modelo de datos que hayamos llevado al campo “<em>Saturación de color</em>” de la visualización.
El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_01.jpg"></a>
Partimos de un valor base (“Ventas”, por ejemplo), potencialmente dividido según un criterio de segmentación ("Categoría de producto"), que tenga asociada información de carácter geográfico. Ésta deberá estar formada por los códigos correspondientes a las divisiones geográficas existentes en el país seleccionado -no se permiten los conjuntos de valores latitud-longitud-. Cada localización se mostrará en el mapa ocupando un área de dos dimensiones cuya intensidad de color será gestionable mediante otro campo:
<ul><li>Campo “<em>Ubicación</em>”: recibirá el campo geolocalizable (códigos de los estados, condados…)</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se muestran con formato de leyenda permitiendo hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo “<em>Saturación de color</em>”: recibirá el campo (solo admite uno) que será responsable de la intensidad del color mostrado en cada ubicación geográfica.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar este tipo de visualización creamos una instancia de la misma, y arrastramos el campo <em>Units</em> de la tabla <em>Ireland</em> al campo <em>Saturación de color</em> de la visualización. Por defecto se muestra el mapa de los Estados Unidos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_02.jpg"></a>
A continuación, en <em>Formato > Forma > Mapa</em> deberemos escoger el mapa adecuado. En nuestro caso es el de Irlanda:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_03.jpg"></a>
La visualización se actualiza para mostrar el mapa de este país:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_04.jpg"></a>
Ahora deberemos llevar la información geográfica que acompaña a la métrica que estamos analizando al campo <em>Ubicación</em> de la visualización. En nuestro ejemplo es el campo <em>County</em> de la tabla <em>Ireland</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_05.jpg"></a>
Cada uno de los condados de Irlanda se rellena con un color que representa el número de unidades correspondiente.
La columna que llevamos al campo <em>Ubicación</em> deberá contener los códigos geográficos adecuados para el mapa que escojamos. Podemos ver cuáles son estos códigos en <em>Formato > Forma > Ver claves del mapa</em> (tras haber escogido un país). Por ejemplo, los correspondientes a Irlanda son los siguientes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_06.jpg"></a>
Tenemos también el listado de los códigos para los países incluidos en esta visualización <a href="https://docs.microsoft.com/es-es/power-bi/visuals/desktop-shape-map#region-keys">en esta página web de Microsoft</a>.
Por ejemplo, la tabla usada en nuestro ejemplo ("<em>Irland</em>") es la siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_07.jpg"></a>
El listado de países para los que hay disponibles mapas es relativamente pequeño (12 países), pero es posible encontrar mapas personalizados en Internet (véase el enlace a GitHub que acompaña a este artículo).
Volviendo a la visualización, es posible controlar los colores en <em>Formato > Colores de Datos</em>, pudiendo aplicar una paleta de colores divergente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_08.jpg"></a>
No es posible mostrar en la visualización las etiquetas siendo representadas, aunque al mover el cursor por encima de uno de los condados se muestra su nombre y la métrica correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_09.jpg"></a>
Por último, para probar el campo "<em>Leyenda</em>" vamos a crear una columna adicional en nuestra tabla <em>Ireland</em> conteniendo un código (al que vamos a llamar <em>Category</em>) que represente el nivel de unidades en cada condado: "A" si el número de unidades es mayor que 40, "B" si es mayor que 20 o "C" si no cumple ninguna de las dos condiciones anteriores. El código DAX es el siguiente:
Category = SWITCH(TRUE(); [Units] >40; "A"; [Units] > 20; "B"; "C")
Si llevamos este campo al campo <em>Leyenda</em> de la visualización, ésta mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_10.jpg"></a>
La leyenda se muestra en la parte superior de la visualización, aunque es posible personalizar esta posición (y la fuente a usar, su color, etc.). Un clic en alguno de los valores de la leyenda difumina los condados no seleccionados. Así, en la siguiente imagen se ha hecho clic en la etiqueta "B":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/shape_map_11.jpg"></a>
También los colores usados en la leyenda son personalizables (<em>Formato > Colores de datos</em>).
En “<em>Formato > Forma</em>” podemos seleccionar también el tipo de proyección a usar: equirectangular, mercator u ortográfico.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32d87cc8-3503-4900-844e-34b17fb67239') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32d87cc8-3503-4900-844e-34b17fb67239') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32d87cc8-3503-4900-844e-34b17fb67239') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32d87cc8-3503-4900-844e-34b17fb67239') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3c8eddb7-fea6-431f-a0d0-15f84bbfc08a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3c8eddb7-fea6-431f-a0d0-15f84bbfc08a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3c8eddb7-fea6-431f-a0d0-15f84bbfc08a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3c8eddb7-fea6-431f-a0d0-15f84bbfc08a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-23e6a7ee-9480-4c9c-b9bf-4493648ab50f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-23e6a7ee-9480-4c9c-b9bf-4493648ab50f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-23e6a7ee-9480-4c9c-b9bf-4493648ab50f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-23e6a7ee-9480-4c9c-b9bf-4493648ab50f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3b85eaff-5ab0-48b6-a9f6-dfc052e7398d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3b85eaff-5ab0-48b6-a9f6-dfc052e7398d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3b85eaff-5ab0-48b6-a9f6-dfc052e7398d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-3b85eaff-5ab0-48b6-a9f6-dfc052e7398d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-82ac7363-d153-4f21-9625-f9fd48db28ba') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-82ac7363-d153-4f21-9625-f9fd48db28ba') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-82ac7363-d153-4f21-9625-f9fd48db28ba') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-82ac7363-d153-4f21-9625-f9fd48db28ba') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>mapa coroplético</strong> o <strong>filled map</strong> es semejante al “<a href="/powerbi/visual/map-mapa">Mapa</a>”, pues nos permite mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica. La principal diferencia reside en que en la visualización “Mapa” cada localización queda representada en el mapa por una burbuja, mientras que en el mapa coroplético se va a rellenar la zona geográfica a la que se hace referencia.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_01.jpg"></a>
En este tipo de visualización trabajamos con un campo con valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud, campo que podemos dividir según un cierto criterio de segmentación (que puede ser numérico, como se verá más adelante):
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…)</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación (solo admite uno). Al añadirlo, las etiquetas correspondientes a los valores de este campo se mostrarán como leyenda y nos permitirán hacer clic en ellas para filtrar los valores mostrados en el mapa.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
</ul>Antiguamente esta visualización incluía un campo "<em>Saturación de color</em>" que era el responsable de la intensidad del color representando a cada una de las zonas geográficas. A día de hoy ese campo no existe, por lo que la utilidad de la visualización se ha visto seriamente reducida.
Probemos la visualización llevando, de la tabla conteniendo estadísticas mundiales, el campo <em>País</em> al campo <em>Ubicación</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_02.jpg"></a>
Por defecto solo se muestran los países (la columna <em>País</em> contiene todos los países del mundo) del mismo color. Ahora si llevamos, por ejemplo, el campo <em>Extensión</em> de nuestro modelo de datos (campo que contiene la extensión de cada país) al campo <em>Leyenda</em> de la visualización, se muestra la leyenda (por defecto en la parte superior), y cada país al que corresponda cada valor distinto de la leyenda se muestra de un mismo color (es decir, dos países con la misma extensión geográfica se mostrarían con el mismo color). Eso sí, los colores son discretos (no se trata de un degradado):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_03.jpg"></a>
Un clic en una etiqueta de la leyenda "marca" el país en cuestión. Eso sí, si uno es capaz de encontrarlo, pues en el ejemplo mostrado en la siguiente imagen se ha hecho clic en la etiqueta 30528 de la leyenda. Todos los países se muestran con un color más claro menos el país de dicha extensión (imposible de distinguir):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_04.jpg"></a>
¿Qué utilidad puede tener esto? Muy poca, la verdad. Más práctico sería seguir disponiendo de la posibilidad de determinar el color de relleno con un campo numérico o una medida.
Al mover el cursor encima de un país, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/filled_map_05.jpg"></a>
La visualización soporta los mismos estilos que el <a href="/powerbi/visual/map-mapa">Mapa</a>, y nos permite también personalizar los colores a usar.
En general, una visualización bastante decepcionante, sin la utilidad que tenía en el pasado cuando era posible controlar la saturación de los colores usados.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-18b6ee3f-b5f5-45c8-954d-8d0040b919f9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-18b6ee3f-b5f5-45c8-954d-8d0040b919f9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-18b6ee3f-b5f5-45c8-954d-8d0040b919f9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-18b6ee3f-b5f5-45c8-954d-8d0040b919f9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1e429f98-20b7-4247-972f-652cdbb6f4d3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1e429f98-20b7-4247-972f-652cdbb6f4d3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1e429f98-20b7-4247-972f-652cdbb6f4d3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1e429f98-20b7-4247-972f-652cdbb6f4d3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-615b813b-038f-415e-a15a-83196caa21e0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-615b813b-038f-415e-a15a-83196caa21e0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-615b813b-038f-415e-a15a-83196caa21e0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-615b813b-038f-415e-a15a-83196caa21e0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c8cc7730-e758-4967-a650-2918f8ab3861') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c8cc7730-e758-4967-a650-2918f8ab3861') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c8cc7730-e758-4967-a650-2918f8ab3861') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c8cc7730-e758-4967-a650-2918f8ab3861') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9ed062c9-d48f-4bbb-a21d-5708364c7c68') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9ed062c9-d48f-4bbb-a21d-5708364c7c68') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9ed062c9-d48f-4bbb-a21d-5708364c7c68') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9ed062c9-d48f-4bbb-a21d-5708364c7c68') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-4bdb19aa-a3d0-42f5-b511-1b7208e5d062') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-4bdb19aa-a3d0-42f5-b511-1b7208e5d062') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-4bdb19aa-a3d0-42f5-b511-1b7208e5d062') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-4bdb19aa-a3d0-42f5-b511-1b7208e5d062') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-72b1d386-d8a7-49ca-bcea-56241dcc7c84') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-72b1d386-d8a7-49ca-bcea-56241dcc7c84') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-72b1d386-d8a7-49ca-bcea-56241dcc7c84') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-72b1d386-d8a7-49ca-bcea-56241dcc7c84') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32128dc2-825c-4b72-8c12-37c27b586fc0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32128dc2-825c-4b72-8c12-37c27b586fc0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32128dc2-825c-4b72-8c12-37c27b586fc0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32128dc2-825c-4b72-8c12-37c27b586fc0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e6e45cc9-be1b-4a28-9e2f-b2bab0c37393') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e6e45cc9-be1b-4a28-9e2f-b2bab0c37393') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e6e45cc9-be1b-4a28-9e2f-b2bab0c37393') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e6e45cc9-be1b-4a28-9e2f-b2bab0c37393') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f596cdfb-10e1-4d58-91d6-8a47527b7441') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f596cdfb-10e1-4d58-91d6-8a47527b7441') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f596cdfb-10e1-4d58-91d6-8a47527b7441') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f596cdfb-10e1-4d58-91d6-8a47527b7441') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c44abb15-caac-45eb-b7e9-703dd0f4d271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c44abb15-caac-45eb-b7e9-703dd0f4d271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c44abb15-caac-45eb-b7e9-703dd0f4d271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c44abb15-caac-45eb-b7e9-703dd0f4d271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Los <strong>mapas</strong> o <strong>mapas de burbujas</strong> nos permiten mostrar nuestros datos geolocalizados en un mapa lo que, a su vez, permite poner de manifiesto de una forma más clara y rápida la relación entre los valores medidos y su posición geográfica.
Si pinchamos y arrastramos un campo con información geográfica (países, ciudades, etc.) a una zona vacía del área de informes, Power BI interpretará la información y escogerá, por defecto, un mapa para la visualización que se creará.
El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base ("Ventas", por ejemplo), potencialmente dividido según un criterio de segmentación (a llevar al campo <em>Leyenda</em>), que tenga asociada información de carácter geográfico. Ésta puede estar formada por valores geolocalizables (ciudades, estados, países…) o por conjuntos de valores latitud-longitud. Cada posición se mostrará en el mapa mediante una burbuja cuyo tamaño dependerá de la métrica que llevemos al campo <em>Tamaño:</em>
<ul><li>Campo "<em>Ubicación</em>": recibirá el campo geolocalizable (ciudad, estado, país…). Si se lleva a este campo una jerarquía o más de un campo, la visualización mostrará los típicos controles que nos permitirán movernos por la jerarquía.</li>
<li>Campo "<em>Leyenda</em>": recibirá el criterio de segmentación. Solo admite uno.</li>
<li>Campo "<em>Latitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Longitud</em>": recibirá los valores de latitud de los puntos a geolocalizar.</li>
<li>Campo "<em>Tamaño</em>": recibirá el valor que determinará el tamaño de la burbuja. Solo admite uno.</li>
<li>Campo "<em>Información sobre herramientas</em>": recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Si llevamos, por ejemplo, el campo <em>Country</em> de nuestro modelo de datos al campo <em>Ubicación</em> de la visualización, ésta muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_02.jpg"></a>
Por defecto, se muestra una burbuja del mismo tamaño y color en el centro de cada una de las zonas geográficas en cuestión (obsérvese que, aun estando representando países, la burbuja se muestra en lo que parece ser el centro geográfico del país, no en su capital).
Si llevamos una métrica al campo <em>Tamaño</em>, por ejemplo la medida <em>Sales</em> conteniendo la suma de los importes de venta, las burbujas se muestran con un tamaño proporcional a dicha métrica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_03.jpg"></a>
Es posible aumentar o disminuir el tamaño global de estas burbujas en <em>Formato > Burbujas > Tamaño</em>. También es posible especificar el color de cada una en <em>Formato > Colores de datos</em> (véase siguiente imagen). Si movemos el cursor encima de una de las burbujas, se muestra la clásica ventana emergente con la información asociada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_04.jpg"></a>
El igual que ocurre con la visualización "<em>Mapa coroplético</em>", Microsoft admite la posibilidad de que una etiqueta (Boston, por ejemplo) no siempre se interprete correctamente (como la ciudad inglesa o la norteamericana). Para solucionar esto, sugieren la creación de una nueva columna en la tabla en la que se concatene la etiqueta en cuestión con el nombre del país al que pertenece ("Boston UK" o "Boston USA").
Otro problema que puede surgir es con aquellos nombres de, por ejemplo, ciudades, para los que también exista un estado o un país (Georgia, por ejemplo). En este caso podemos decirle a Power BI qué representa exactamente cada campo de nuestra tabla. De esta forma, si "CityName" representa ciudades, podemos seleccionarlo en el área de campos de Power BI y, en <em>Modelado > Propiedades > Categoría de datos</em> seleccionar "Ciudad".
En cualquier caso, Power BI es muy flexible en lo que respecta al tipo de valor de ubicación que acepta, desde detalles muy generales como el nombre de una ciudad hasta el código de un aeropuerto.
Si arrastramos un campo categórico como <em>Number of Children</em> (conteniendo el número de hijos de nuestros clientes) al campo <em>Leyenda</em> de la visualización, cada burbuja se desglosa en sectores que representan los distintos valores de dicho campo. Como se ve en la siguiente imagen, ahora es la información del sector que corresponda la que se muestra en la ventana emergente al mover el cursor por encima:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_05.jpg"></a>
En el ejemplo anterior se ha aumentado el tamaño global de las burbujas para poder apreciar correctamente el desglose de cada una de ellas.
No es posible, en todo caso, mostrar las etiquetas asociadas a cada uno de estos sectores (o las de las burbujas): ni la variable representada ni la métrica asociada.
Como se ha comentado, si llevamos dos o más campos (o una jerarquía) al campo <em>Ubicación</em> de la visualización, podremos desplazarnos por la jerarquía con los controles habituales de Power BI. En la siguiente imagen se muestra la visualización tras llevar el campo <em>City</em> justo debajo de <em>Country</em> y bajar hasta este nivel de la jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_06.jpg"></a>
Esta visualización ofrece cinco estilos de mapa. El estilo por defecto es el llamado <em>Carretera</em>, al que se corresponden los ejemplos mostrados hasta ahora. Los otros estilos son:
<ul><li>Aéreo:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_07.jpg"></a>
<ul><li>Oscuro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_08.jpg"></a>
<ul><li>Claro:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_09.jpg"></a>
<ul><li>Y escala de grises:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_10.jpg"></a>
También es posible convertir el mapa de burbujas en un mapa térmico (<em>Formato > Mapa térmico</em>), aunque el resultado no es tan convincente como el de otros mapas explícitamente desarrollados para mostrar ese tipo de información:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/map_11.jpg"></a>
Con esta opción activada es posible especificar los colores a mostrar, el radio de cada "mancha" y su transparencia.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-555e919a-23ec-4d85-843c-bf7dc6ba7b99') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-555e919a-23ec-4d85-843c-bf7dc6ba7b99') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-555e919a-23ec-4d85-843c-bf7dc6ba7b99') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-555e919a-23ec-4d85-843c-bf7dc6ba7b99') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d35f959d-d02c-414e-b8dd-60428b3d131a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d35f959d-d02c-414e-b8dd-60428b3d131a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d35f959d-d02c-414e-b8dd-60428b3d131a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d35f959d-d02c-414e-b8dd-60428b3d131a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-497ff554-353d-4ebd-977b-842970129878') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-497ff554-353d-4ebd-977b-842970129878') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-497ff554-353d-4ebd-977b-842970129878') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-497ff554-353d-4ebd-977b-842970129878') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32924af2-569c-4ae1-aa1f-2f1fa37a53cc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32924af2-569c-4ae1-aa1f-2f1fa37a53cc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32924af2-569c-4ae1-aa1f-2f1fa37a53cc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-32924af2-569c-4ae1-aa1f-2f1fa37a53cc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>treemap</strong> o <strong>gráfico de rectángulos</strong>, de forma semejante al gráfico circular nos permite comparar proporciones de valores respecto de un total, es decir, la contribución de cada elemento al total. Permite una mejor visualización que el gráfico circular cuando el número de valores a mostrar no es bajo, aunque resulta poco cómodo si dicho número es excesivamente elevado. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_01.jpg"></a>
En este tipo de visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir un rectángulo del gráfico (el correspondiente a un país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Grupo</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “Explorar en profundidad” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Permite añadir más de uno, pero el comportamiento no está claro.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de un sector.</li>
</ul>Llevemos, tal y como se ha sugerido, la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que se realiza cada venta) al campo <em>Grupo</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_02.jpg"></a>
El área de cada rectángulo es proporcional a la cifra que representa (ventas por país).
Si llevamos un campo (<em>Category</em>, conteniendo la categoría del producto vendido) al campo <em>Detalles</em> de la visualización, comprobamos cómo cada rectángulo de la imagen anterior se desglosa según este criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_03.jpg"></a>
Vemos también cómo se muestra la ventana emergente con la información asociada a cada rectángulo al mover el cursor por encima de la visualización.
Las etiquetas mostradas (indicando el país y la categoría en nuestro ejemplo) se pueden ocultar y personalizar en <em>Formato > Etiquetas de categorías</em>. También se pueden mostrar las cifras representadas en <em>Formato > Etiquetas de datos:</em>
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/treemap_04.jpg"></a>
Por último, comentar que también podemos personalizar la leyenda y los colores a utilizar.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a49baed0-4e95-485a-b656-0a8a9911895d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a49baed0-4e95-485a-b656-0a8a9911895d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a49baed0-4e95-485a-b656-0a8a9911895d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a49baed0-4e95-485a-b656-0a8a9911895d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c3b64dc2-2f19-4b7e-8730-7e3279a01135') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c3b64dc2-2f19-4b7e-8730-7e3279a01135') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c3b64dc2-2f19-4b7e-8730-7e3279a01135') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c3b64dc2-2f19-4b7e-8730-7e3279a01135') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e8b1df53-0a82-459f-a966-de2ec821b606') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e8b1df53-0a82-459f-a966-de2ec821b606') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e8b1df53-0a82-459f-a966-de2ec821b606') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e8b1df53-0a82-459f-a966-de2ec821b606') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7c4b0c1d-a945-49a7-adb8-ed55e3494a14') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7c4b0c1d-a945-49a7-adb8-ed55e3494a14') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7c4b0c1d-a945-49a7-adb8-ed55e3494a14') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7c4b0c1d-a945-49a7-adb8-ed55e3494a14') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5bac25eb-a806-43f6-8ebb-b8d832736fcc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5bac25eb-a806-43f6-8ebb-b8d832736fcc') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5bac25eb-a806-43f6-8ebb-b8d832736fcc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5bac25eb-a806-43f6-8ebb-b8d832736fcc') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico de anillos</strong> o <strong>donut chart</strong> es semejante al gráfico circular, siendo adecuado para mostrar proporciones en un conjunto y, al igual que le ocurría a aquel, es especialmente aconsejable cuando el número de sectores (de valores a mostrar) no es demasiado elevado y las diferencias entre estos valores son son excesivamente grandes pues, de otra forma, los sectores del gráfico resultan más difíciles de apreciar. El panel de configuración de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_01.jpg"></a>
Trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“estado civil de los compradores”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (suma de importes de ventas) al campo <em>Valores</em> de la visualización, y el campo <em>Country</em> (país en el que realiza cada venta) al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_02.jpg"></a>
La visualización nos muestra el anillo o dónut dividido en segmentos correspondientes a la métrica que estemos representando (ventas, en nuestro ejemplo) para cada uno de los valores del campo que hayamos llevado a <em>Leyenda</em> (países).
Es posible especificar qué etiquetas mostrar para cada segmento. La etiqueta por defecto es la "<em>Categoría</em>" (el valor del campo <em>Leyenda</em> que corresponda en cada caso), pero podemos escoger entre ésta, el valor representado, el porcentaje que éste supone respecto del total, o cualquier combinación de éstas (véase siguiente imagen). En cualquier caso, la "<em>categoría</em>" y el valor representado se muestran en la clásica ventana emergente que se ve al mover el cursor por encima de alguno de los segmentos del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_03.jpg"></a>
Si llevamos un nuevo campo de nuestro modelo de datos al campo <em>Detalles</em> de la visualización, cada uno de los segmentos del dónut se desagrega según los valores de este campo. Por ejemplo, si llevamos el campo <em>Marital Status</em> (conteniendo el estado civil de nuestros clientes) a este campo, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_04.jpg"></a>
Adicionalmente, es posible personalizar tanto la leyenda, como los colores a usar y las etiquetas (familia de la fuente, tamaño, color...).
También es posible controlar el radio interno del dónut:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/donut_chart_05.jpg"></a>
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fee1b257-2005-49e9-bd14-e2150a5132b4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fee1b257-2005-49e9-bd14-e2150a5132b4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fee1b257-2005-49e9-bd14-e2150a5132b4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fee1b257-2005-49e9-bd14-e2150a5132b4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7a450169-82ac-403d-af5e-d293c31cf428') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7a450169-82ac-403d-af5e-d293c31cf428') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7a450169-82ac-403d-af5e-d293c31cf428') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7a450169-82ac-403d-af5e-d293c31cf428') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-410531a6-d7d0-450e-8906-f1564280bc8d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-410531a6-d7d0-450e-8906-f1564280bc8d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-410531a6-d7d0-450e-8906-f1564280bc8d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-410531a6-d7d0-450e-8906-f1564280bc8d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b5f6937c-83aa-439f-b5ad-03734329c8d4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b5f6937c-83aa-439f-b5ad-03734329c8d4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b5f6937c-83aa-439f-b5ad-03734329c8d4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b5f6937c-83aa-439f-b5ad-03734329c8d4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2c815f76-808d-4e05-bc14-5d01a44598d8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2c815f76-808d-4e05-bc14-5d01a44598d8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2c815f76-808d-4e05-bc14-5d01a44598d8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2c815f76-808d-4e05-bc14-5d01a44598d8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-17315d3a-8bc3-4747-974b-e4740ea0d2a9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-17315d3a-8bc3-4747-974b-e4740ea0d2a9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-17315d3a-8bc3-4747-974b-e4740ea0d2a9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-17315d3a-8bc3-4747-974b-e4740ea0d2a9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d32a27b9-8fcd-4673-a408-c6344765d7a8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d32a27b9-8fcd-4673-a408-c6344765d7a8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d32a27b9-8fcd-4673-a408-c6344765d7a8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-d32a27b9-8fcd-4673-a408-c6344765d7a8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico circular</strong>, <strong>gráfico de tarta</strong> o <strong>pie chart</strong> es adecuado para mostrar proporciones en un conjunto cuando solo se pretende comunicar el orden de magnitud de éstas y no existe la necesidad de ser especialmente exactos en la interpretación. Este gráfico no se aconseja cuando el número de sectores es demasiado alto ni cuando éstos tienen tamaños excesivamente diferentes, pues en estos dos casos, la interpretación de los resultados será especialmente compleja e inexacta.
Veamos el panel de configuración de esta visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_01.jpg"></a>
En esta visualización trabajamos con un valor base (“ventas”, por ejemplo) y un criterio de segmentación (“países”), para dar como resultado un valor por segmento (“ventas por cada país”). A su vez, podemos dividir cada sector del gráfico (el correspondiente a cada país, en nuestro ejemplo) según otro criterio secundario (“categoría de producto vendido”):
<ul><li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación. Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Detalles</em>”: recibirá el criterio secundario. Solo admite uno.</li>
<li>Campo “<em>Valores</em>”: recibirá el valor base a mostrar. Solo permite añadir uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector.</li>
</ul>Comencemos llevando el campo <em>Sales</em> (suma de importes de ventas) a <em>Valores</em>, y el campo <em>Country</em> (país en el que se realiza cada venta) a <em>Leyenda</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_02.jpg"></a>
Si ahora arrastramos el campo <em>Category</em> de nuestro modelo de datos (campo que contiene la categoría de cada producto vendido) al campo <em>Detalles</em> de la visualización, cada uno de los segmentos anteriores se divide según la categoría de producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_03.jpg"></a>
Podemos personalizar las etiquetas que se muestran asociadas a cada segmento en <em>Formato > Etiquetas de detalles</em>. Es posible mostrar la categoría (es decir, el valor del campo que hayamos llevado a <em>Leyenda</em> o a <em>Detalles</em>), el valor de la métrica representada, el porcentaje que ésta representa respecto del total, o cualquier combinación de estos tres datos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_04.jpg"></a>
También podemos mostrar (y personalizar) la leyenda -véase siguiente imagen-, y personalizar los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_05.jpg"></a>
Tal y como se ha comentado, si se lleva al campo <em>Leyenda</em> de la visualización más de un campo de nuestro modelo de datos, podremos recorrer la estructura jerárquica mediante los clásicos controles de Power BI. Así, si llevamos el campo <em>Region</em> (conteniendo la región en la que se realiza la venta) por detrás del campo <em>Country</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_06.jpg"></a>
...activamos el "<em>Modo detallado</em>", y hacemos clic en el sector correspondiente a "<em>Spain</em>" obtenemos el siguiente resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/pie_chart_07.jpg"></a>
En la imagen anterior se ha activado la leyenda y se ha movido a la izquierda (<em>Formato > Leyenda</em>). Vemos también cómo al mover el cursor encima de uno de los sectores se muestra la típica ventana emergente con la información asociada.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8236df16-2140-4995-8e8a-9d3e3a876bca') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8236df16-2140-4995-8e8a-9d3e3a876bca') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8236df16-2140-4995-8e8a-9d3e3a876bca') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8236df16-2140-4995-8e8a-9d3e3a876bca') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e92f3fa3-a7a1-47fc-b97b-59aa27adfacd') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e92f3fa3-a7a1-47fc-b97b-59aa27adfacd') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e92f3fa3-a7a1-47fc-b97b-59aa27adfacd') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-e92f3fa3-a7a1-47fc-b97b-59aa27adfacd') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8fba9dbe-142d-4887-981c-92285d4d8608') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8fba9dbe-142d-4887-981c-92285d4d8608') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8fba9dbe-142d-4887-981c-92285d4d8608') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8fba9dbe-142d-4887-981c-92285d4d8608') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8eb6a0d2-6329-4690-823f-d15d1bc33961') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8eb6a0d2-6329-4690-823f-d15d1bc33961') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8eb6a0d2-6329-4690-823f-d15d1bc33961') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8eb6a0d2-6329-4690-823f-d15d1bc33961') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5b7cd1a7-850a-4e31-a720-7dda878bbb3d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5b7cd1a7-850a-4e31-a720-7dda878bbb3d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5b7cd1a7-850a-4e31-a720-7dda878bbb3d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-5b7cd1a7-850a-4e31-a720-7dda878bbb3d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-43174d56-cd04-45a6-8c4a-58ff2190abd7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-43174d56-cd04-45a6-8c4a-58ff2190abd7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-43174d56-cd04-45a6-8c4a-58ff2190abd7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-43174d56-cd04-45a6-8c4a-58ff2190abd7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c6b2d0cb-38cc-4796-a681-cf8b561c943e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c6b2d0cb-38cc-4796-a681-cf8b561c943e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c6b2d0cb-38cc-4796-a681-cf8b561c943e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c6b2d0cb-38cc-4796-a681-cf8b561c943e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9dc6b7a7-3879-4eb9-8c36-a8e2b1e43d12') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9dc6b7a7-3879-4eb9-8c36-a8e2b1e43d12') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9dc6b7a7-3879-4eb9-8c36-a8e2b1e43d12') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-9dc6b7a7-3879-4eb9-8c36-a8e2b1e43d12') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Waterfall chart</strong> o <strong>Gráfico de cascada</strong> es especialmente útil cuando queremos mostrar el efecto acumulativo de una serie de valores positivos y negativos, por ejemplo, flujos de caja, ventas periódicas, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con un valor base a representar como aumentos o disminuciones en el eje vertical y un criterio (frecuentemente temporal, pero no tiene por qué ser así) que se mostrará en el eje horizontal.
<ul><li>Campo “<em>Categoría</em>”: recibirá el criterio temporal (por ejemplo, “años”) o del tipo que sea, que se mostrará en el eje X. Si hay más de uno o si se trata de una jerarquía se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo "<em>Desglose</em>": recibirá un criterio adicional por el que se dividirá cada una de las barras creadas.</li>
<li>Campo “<em>Eje Y</em>”: recibirá el valor base conteniendo los incrementos o disminuciones a mostrar verticalmente. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de una barra.</li>
</ul>Tras creas una instancia de esta visualización, llevemos al campo <em>Eje Y</em> una medida que calcule el incremento de ventas de un año con respecto al año anterior, por ejemplo:
Sales YoY =
DIVIDE(
[Sales] - [Sales LY];
[Sales LY]
)
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_02.jpg"></a>
Inicialmente se muestra la métrica en análisis por medio de una única barra vertical. Si llevamos al campo <em>Categoría</em> de la visualización el campo <em>Date</em> de nuestro modelo de datos, la barra anterior se desglosa según el criterio en cuestión (por años en nuestro caso) mostrando una barra para cada año, pero no representando éstas las cifras de ventas por año, sino la variación de un año con respecto al anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_03.jpg"></a>
Si visualizamos en una tabla las cifras de ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_04.jpg"></a>
...comprobamos que el primer año no está representado en la gráfica de cascada (al no existir una cifra anterior con respecto a la que calcular el incremento o decremento), y que, por ejemplo, el año 2016 representó una cierta caída con respecto al año 2015, caída que se muestra en el gráfico de cascada con la primera columna de color rojo.
Si movemos el cursor encima de las barras, se muestra la ventana emergente clásica con información sobre los datos siendo representados, aunque también podemos mostrar las etiquetas correspondientes en <em>Formato > Etiquetas de datos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_05.jpg"></a>
En este ejemplo, al haber llevado al campo <em>Categoría</em> una jerarquía, la visualización nos muestra en la esquina superior derecha los típicos controles que nos permiten navegar por ésta.
El campo <em>Desglose</em> de la visualización nos permite visualizar los valores que toma la métrica en análisis para cada valor del campo que hayamos llevado al eje X desglosando el incremento o decremento de dicho valor según la aportación de cada valor del campo que llevemos a <em>Desglose</em>. Veámoslo con un ejemplo:
Si quisiéramos, por ejemplo visualizar cómo las ventas de cada país aportan al incremento o decremento final de cada año, deberíamos poder llevar el campo <em>Country</em> de nuestro modelo de datos al campo <em>Desglose</em>. En este ejemplo particular con el que estamos trabajando, sin embargo, Power BI nos devuelve un error: "<em>La función 'SAMEPERIODLASTYEAR' espera una selección contigua cuando la columna de fecha viene de una tabla del lado 1 de una relación bidireccional</em>", de forma que, para probar este campo <em>Desglose</em>, vamos a crear una nueva visualización semejante a la anterior sustituyendo la medida <em>Sales YoY</em> por otra medida que simplemente sume las ventas. Y, por supuesto, vamos a llevar el campo <em>Country</em> al campo <em>Desglose</em>, pues éste era el objetivo (aunque con una métrica diferente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_06.jpg"></a>
Vemos columnas (con color naranja) que representan la métrica para los años y, entre ellas, el desglose del incremento o decremento por país, mostrándose en primer lugar los que más aportan a la cifra final (es por esto que entre 2015 y 2016 el primer país mostrado es Portugal, mientras que entre 2016 y 2017 es Italia, por ejemplo).
Y también aquí, por supuesto, se muestra la ventana emergente con la información asociada, en este caso mostrando los valores iniciales y finales (para cada país, en nuestro ejemplo) y el cambio correspondiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_07.jpg"></a>
La visualización, además, nos permite configurar los ejes X e Y, la leyenda y los colores a usar:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/waterfall_chart_08.jpg"></a>
Buena visualización, aunque limitada por esos errores que muestra en función del tipo de métrica que se use.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-1af9e428-221e-40ff-b5e0-3f8d21524565') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-af083e49-fe13-4b84-ac53-ff2715671e76') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-c41df780-44b3-42d3-9e13-473a8d4b497b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-a254065e-cb98-4865-ae7a-ba5e7687971b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-6617bb05-066f-44c4-9937-1d432b687f72') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-fc3d9104-0daa-4013-b2b9-37acb119c83f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-66914dfd-db9f-41cd-9290-6a0a1b5ed1a1') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Ribbon Chart</strong> o <strong>Gráfico de la barra de herramientas</strong> (nombre un tanto inexplicable) permite visualizar fácilmente qué categoría de datos tiene el mayor valor, siendo especialmente eficaces para mostrar cambios de clasificación, mostrándose el segmento con valor más alto siempre en la parte superior de cada período de tiempo (o en cada valor de la variable que se haya llevado al eje X):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_01.jpg"></a>
En este tipo de visualizaciones trabajaremos con un valor base a mostrar en la gráfica con barras verticales (aun cuando no lo parezca, se trata de barras verticales unidas horizontalmente), un criterio de segmentación principal (según el cual se dividirán las barras verticales en segmentos) y otro secundario que controlará la disposición horizontal de las diferentes barras:
<ul><li>Campo “<em>Eje</em>”: recibirá el criterio de segmentación que controlará la disposición horizontal de las diferentes barras verticales (por ejemplo, una variable temporal). Si hay más de uno se mostrará la opción “<em>Explorar en profundidad</em>” que, activada, nos permite recorrer esa estructura jerárquica.</li>
<li>Campo “<em>Leyenda</em>”: recibirá el criterio de segmentación que dividirá una barra vertical en segmentos menores. Solo admite uno y deberá tratarse de un campo categórico.</li>
<li>Campo “<em>Valor</em>”: recibirá el valor base a mostrar. Solo admite uno.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de los segmentos de las barras verticales.</li>
</ul>Para probar la visualización, llevemos la medida <em>Sales</em> (conteniendo la suma de la cifra de ventas) al campo <em>Valor</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_02.jpg"></a>
Por defecto, se muestra una única barra representando el total de la cifra en cuestión. Si arrastramos el campo <em>Date</em>, por ejemplo, de nuestro modelo de datos al campo <em>Eje</em> de la visualización, la columna anterior se desglosa en tantas columnas verticales como valores tome el campo <em>Date</em> -en este caso-:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_03.jpg"></a>
Aun cuando en la imagen anterior no se aprecia, al haber llevado una jerarquía al campo <em>Eje</em>, la visualización nos muestra los típicos controles que nos permiten recorrer la jerarquía verticalmente para mostrar los datos por años, trimestres, meses, etc. Por defecto nos muestra los valores del campo que ocupa el nivel superior -años en nuestro caso-.
Lo verdaderamente interesante viene cuando llevamos algún campo categórico de nuestras tablas al campo <em>Leyenda</em> de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_04.jpg"></a>
En el ejemplo anterior se ha llevado el campo <em>Country</em> que contiene el país en el que se realiza cada venta. Vemos que las columnas se han desglosado en segmentos según este criterio, columnas que, en la imagen, pueden distinguirse por tener un color más vivo y estar situadas exactamente encima de las etiquetas de años (en este sentido el comportamiento del Ribbon Chart es semejante al del gráfico de columnas apiladas, pues cada segmento creado tiene una altura proporcional al valor de la métrica que represente) pero con un par de matices: los segmentos están ordenados siempre de mayor a menor (los mayores siempre en la parte superior de la columna) y los segmentos del mismo tipo están unidos por una banda horizontal de un color semejante al del segmento que nos permite ver tanto la evolución de la métrica como su posición relativa respecto al resto de segmentos.
Así, por ejemplo, en la imagen anterior podemos ver fácilmente que Portugal "adelantó" a Italia en ventas en el año 2016, pero que volvió a perder esa tercera posición al año siguiente.
Si llevamos el campo <em>Marital Status</em> de nuestro modelo de datos (campo que contiene el estado civil de nuestros clientes) al campo <em>Leyenda</em> de la visualización, las ventas se mostrarán ahora según este nuevo criterio:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_05.jpg"></a>
Vemos de esta forma lo fácil que resulta tener una idea de la evolución de la métrica en análisis con respecto a diferentes criterios.
Es posible mostrar en la gráfica las etiquetas correspondientes a los valores representados, aunque para esto necesitaremos ampliar notablemente el tamaño de la visualización (véase siguiente imagen). También podemos ver la clásica ventana emergente al mover el cursor encima de alguno de los segmentos de la barra:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_06.jpg"></a>
...o de la banda que une dos segmentos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/ribbon_chart_07.jpg"></a>
En este último caso podemos ver la diferencia (de la métrica en análisis) de un año para otro, así como la posición o rango que ocupaba en cada uno de ellos.
El eje X puede mostrarse con una escala lineal o logarítmica, pero en el eje Y solo está disponible la lineal. La visualización nos permite personalizar los colores a usar, la leyenda y el mencionado eje X.
Se trata de una muy interesante visualización que nos puede aportar gran información sobre la evolución de nuestras métricas.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-97122da5-0cb3-4168-bcad-c1e6315d637a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-97122da5-0cb3-4168-bcad-c1e6315d637a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-97122da5-0cb3-4168-bcad-c1e6315d637a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-97122da5-0cb3-4168-bcad-c1e6315d637a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-76831647-2353-4ca1-9425-99e2def0a97c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-76831647-2353-4ca1-9425-99e2def0a97c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-76831647-2353-4ca1-9425-99e2def0a97c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-76831647-2353-4ca1-9425-99e2def0a97c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-377fcc22-404a-48fc-9633-9004048bc707') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-377fcc22-404a-48fc-9633-9004048bc707') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-377fcc22-404a-48fc-9633-9004048bc707') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-377fcc22-404a-48fc-9633-9004048bc707') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f88a1f44-7b13-450a-8bce-005035288837') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f88a1f44-7b13-450a-8bce-005035288837') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f88a1f44-7b13-450a-8bce-005035288837') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-f88a1f44-7b13-450a-8bce-005035288837') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b088cb86-6ddd-456c-a90d-8aabe0c0400c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b088cb86-6ddd-456c-a90d-8aabe0c0400c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b088cb86-6ddd-456c-a90d-8aabe0c0400c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-b088cb86-6ddd-456c-a90d-8aabe0c0400c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-afb98cfb-2d5e-4a6c-bc07-03116c9d008d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-afb98cfb-2d5e-4a6c-bc07-03116c9d008d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-afb98cfb-2d5e-4a6c-bc07-03116c9d008d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-afb98cfb-2d5e-4a6c-bc07-03116c9d008d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Gráfico de columnas agrupadas y de líneas</strong> o <strong>Line and clustered column chart</strong> es semejante al gráfico de columnas apiladas y de líneas pues resulta de utilidad cuando queremos mostrar dos medidas con diferentes escalas. Su panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por cada columna puede ser dividido en un subconjunto de columnas según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Serie de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de línea. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “<em>Información sobre herramientas</em>”: recibirá campos cuyo contenido queremos que se muestre en la ventana emergente que se abre al mover el ratón por encima de un sector o de una línea.</li>
</ul>Llevemos, por ejemplo, el campo <em>Sales</em> conteniendo los importes de ventas al campo <em>Valores de líneas</em> de la visualización, el campo <em>Units</em> conteniendo el número de unidades vendidas al campo <em>Valores de columnas</em>, y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_02.jpg"></a>
Vemos tanto la gráfica de columnas como la gráfica de líneas, ambas superpuestas compartiendo el eje horizontal común. El eje vertical de la izquierda es el correspondiente a las columnas y el eje vertical de la derecha el correspondiente a la línea, aunque esto no queda demasiado claro (lo es en este ejemplo pues las ventas se muestran en euros y las unidades vendidas no).
Al haber llevado al eje compartido una jerarquía, la visualización muestra los típicos controles que nos permiten recorrer la jerarquía permitiéndonos visualizar nuestras métricas por años, trimestres, etc.
Si llevamos ahora el campo <em>Category</em> con la categoría de cada producto vendido al campo <em>Serie de columnas</em> de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_03.jpg"></a>
Comprobamos cómo cada una de las columnas iniciales se ha desglosado en un subconjunto de columnas según el criterio recién añadido.
Es posible mostrar las etiquetas correspondientes a los valores representados por la línea y las columnas en <em>Formato > Etiquetas de datos</em>, aunque el resultado por defecto no es demasiado claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_04.jpg"></a>
Y, por supuesto, al mover el cursor por encima de la línea o de las columnas se muestra la ventana emergente con la información asociada (información diferente si movemos el cursor encima de la línea o de una columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_05.jpg"></a>
Como se ha comentado, podemos llevar al campo <em>Valores de líneas</em> más de un campo o de una medida, creándose una línea para cada uno de los campos. Por ejemplo, si llevamos la medida <em>Margin</em> conteniendo el beneficio obtenido de cada venta a este campo de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_clustered_column_chart_06.jpg"></a>
Comprobamos que la leyenda se ha actualizado para mostrar también la etiqueta correspondiente a la medida añadida.
Adicionalmente, la visualización nos permite personalizar la leyenda, los ejes, los colores a usar, etc.
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7ef73708-56be-4580-a57c-e0c7de73d02f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7ef73708-56be-4580-a57c-e0c7de73d02f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7ef73708-56be-4580-a57c-e0c7de73d02f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-7ef73708-56be-4580-a57c-e0c7de73d02f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-19744782-f36c-4760-aaf4-01c64b345cff') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-19744782-f36c-4760-aaf4-01c64b345cff') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-19744782-f36c-4760-aaf4-01c64b345cff') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-19744782-f36c-4760-aaf4-01c64b345cff') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-46d23d01-a380-454a-a611-8e5acbab53f8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-46d23d01-a380-454a-a611-8e5acbab53f8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-46d23d01-a380-454a-a611-8e5acbab53f8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-46d23d01-a380-454a-a611-8e5acbab53f8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2dc0ba79-a4f1-45ab-bb88-9f21f007a34e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2dc0ba79-a4f1-45ab-bb88-9f21f007a34e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2dc0ba79-a4f1-45ab-bb88-9f21f007a34e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-2dc0ba79-a4f1-45ab-bb88-9f21f007a34e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8cd957e3-c674-4c46-8ffe-a8460ed7aefb') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8cd957e3-c674-4c46-8ffe-a8460ed7aefb') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8cd957e3-c674-4c46-8ffe-a8460ed7aefb') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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', 'insert-max_800_px-8cd957e3-c674-4c46-8ffe-a8460ed7aefb') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>gráfico columnas apiladas y de líneas</strong> o <strong>Line and stacked column chart</strong> es especialmente útil cuando queremos mostrar dos medidas con diferentes escalas al mismo tiempo que comparamos valores de diferentes categorías con respecto a un total:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_01.jpg"></a>
En este tipo de visualizaciones trabajamos con dos valores (“Ventas” y “Unidades vendidas”, por ejemplo) y un eje común a ambos valores (“Años”, por ejemplo). A su vez, el valor representado por columnas puede ser dividido según un criterio secundario (“Categoría de producto vendido”, por ejemplo):
<ul><li>Campo “<em>Eje compartido</em>”: recibirá el valor a representar en el eje X, común tanto a columnas como a líneas.</li>
<li>Campo “<em>Series de columnas</em>”: recibirá el criterio de segmentación del valor a representar por medio de columnas. Solo admite un criterio.</li>
<li>Campo “<em>Valores de columnas</em>”: recibirá el valor base a mostrar en columnas. Solo admite un valor.</li>
<li>Campo “<em>Valores de líneas</em>”: recibirá el valor base a mostrar en el gráfico de líneas. Admite más de un valor, creándose una línea para cada uno. Debe tenerse en cuenta que los ejes son comunes a todas las líneas, por lo que, si los valores a representar son muy dispares, es posible que alguna línea no se visualice correctamente.</li>
<li>Campo “Información sobre herramientas”: recibirá campos cuyo contenido queremos que se muestre en la ventana flotante que se abre al mover el ratón por encima de la gráfica.</li>
</ul>Llevemos, como se ha comentado, la medida <em>Units</em> al campo <em>Valores de líneas</em>, el campo <em>Sales</em> al campo <em>Valores de columnas</em> y el campo <em>Date</em> de nuestro calendario al campo <em>Eje compartido</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_02.jpg"></a>
Vemos que se muestran ambas gráficas sobre el eje común (años, por defecto). Como hemos llevado a este campo de la visualización una jerarquía, la visualización nos muestra (en la esquina superior derecha de la imagen anterior) los típicos controles que nos permiten movernos por la jerarquía para mostrar nuestras métricas por años, trimestres, meses, etc.
Comprobamos también que tanto las columnas como la línea tienen ejes verticales independientes (las columnas el eje vertical de la izquierda, y la línea el eje vertical de la derecha, aunque esto no siempre queda tan claro para el lector: en nuestro ejemplo es fácil de ver pues las ventas se muestran en euros y el número de unidades no).
Si llevamos ahora un nuevo campo categórico al campo <em>Serie de columnas</em> de la visualización, por ejemplo, el campo <em>Category</em>, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_03.jpg"></a>
Es decir, cada una de las columnas anteriores se desglosa según el criterio recién añadido, mostrándose la leyenda correspondiente en la parte superior del gráfico.
Es posible mostrar las etiquetas correspondientes a los valores representados en <em>Formato > Etiquetas de datos</em>, aunque deberemos configurar bien éstas pues el resultado por defecto no es especialmente claro:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_04.jpg"></a>
Por otro lado, al mover el cursor por encima de las columnas o por encima de la línea se mostrará la clásica ventana emergente con la información asociada (diferente si situamos el cursor sobre la línea o sobre las columnas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/line_stacked_column_05.jpg"></a>
Por último, la visualización nos permite personalizar los colores a usar, los ejes, la leyenda...
', '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: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->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/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', 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: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->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/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', 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: 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)