- 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: 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)