- 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', 'e9aedf62-76f8-42f7-b9db-8a0d79e33952') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e9aedf62-76f8-42f7-b9db-8a0d79e33952') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e9aedf62-76f8-42f7-b9db-8a0d79e33952') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e9aedf62-76f8-42f7-b9db-8a0d79e33952') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b08091f4-5e8d-47cc-b218-4c4555053917') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b08091f4-5e8d-47cc-b218-4c4555053917') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b08091f4-5e8d-47cc-b218-4c4555053917') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b08091f4-5e8d-47cc-b218-4c4555053917') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e3bc0a51-d857-4db0-9cc0-483d0705d6b9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e3bc0a51-d857-4db0-9cc0-483d0705d6b9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e3bc0a51-d857-4db0-9cc0-483d0705d6b9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e3bc0a51-d857-4db0-9cc0-483d0705d6b9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '0928ee1d-088c-453e-b625-00d7d6983847') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '0928ee1d-088c-453e-b625-00d7d6983847') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '0928ee1d-088c-453e-b625-00d7d6983847') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '0928ee1d-088c-453e-b625-00d7d6983847') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e4ee7bf4-230a-4616-8b7d-0dd96270db34') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e4ee7bf4-230a-4616-8b7d-0dd96270db34') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e4ee7bf4-230a-4616-8b7d-0dd96270db34') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e4ee7bf4-230a-4616-8b7d-0dd96270db34') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Mekko Chart</strong> soluciona uno de los problemas de los <em>tree maps</em> cuando se usan para mostrar una categoría segmentada por otra dimensión. Por ejemplo, obsérvese el siguiente <em>tree map</em> que muestra las ventas realizadas en función del estado civil del comprador en el que cada uno de estos bloques se divide a su vez según el país de origen del comprador:
Las áreas correspondientes a cada estado civil, si bien se muestran como rectángulos (lo que siempre hace más cómoda su interpretación que si se utilizasen áreas circulares, por ejemplo), éstos no tienen ni una altura común ni un ancho común, lo que dificulta su comparación: ¿Cuántas veces se han vendido más productos a la categoría "<em>Other</em>" que a la categoría "<em>Single</em>"? ¿2? ¿1.5? Y la comparación de las ventas en un país tampoco resulta evidente. Fijémonos, por ejemplo, en las ventas a divorciados en España y a viudos en el mismo país: parecen semejantes, pero tal vez nos gustaría ser capaces de identificar visualmente cuál de las dos es mayor, por pequeña que sea esta cantidad. Esto se soluciona parcialmente con una gráfica de barras 100% apiladas:
Ahora resulta evidente que las ventas en España a viudos es un par de puntos superior a las ventas a divorciados. Pero hemos perdido la posibilidad de comparar las ventas globales por estado civil (pues todas las columnas se muestran con el mismo ancho y la misma altura).
¿No podrían crearse estas barras verticales de forma que su ancho fuese proporcional a la cifra total representada? Esto unificaría la funcionalidad del <em>tree map</em> y del gráfico de barras 100% apiladas... Pues es esto exactamente lo que hace el <em>Mekko Chart</em>. Si transformamos cualquiera de las anteriores visualizaciones en otra de tipo <em>Mekko Chart</em>, el resultado es el siguiente:
La interpretación ahora es más sencilla, permitiéndonos comparar la métrica en análisis basándonos solo en el ancho de cada barra.
La configuración de esta gráfica es la siguiente:
Se ha llevado al campo <em>Categoría</em> la dimensión principal que va a definir las columnas principales (el estado civil de nuestro cliente, en este ejemplo), al campo <em>Series</em> el criterio que va a dividir cada columna (el país en nuestro ejemplo), al campo <em>Eje Y</em> la métrica a representar (ventas), y al campo <em>Ancho de eje</em> el criterio que va a definir el ancho de las columnas. Esto nos permitiría mostrar dos métricas simultáneamente: la principal (<em>Eje Y</em>) que determinaría la división de cada columna, y la secundaria (<em>Ancho del eje</em>) que determinaría el ancho de cada columna. En nuestro ejemplo ambas métricas son la misma: las ventas.
Podemos modificar los colores de las áreas en <em>Formato > Colores de datos</em>, y mostrar las etiquetas de los datos en <em>Formato > Etiquetas de datos</em>. Solo se puede mostrar el porcentaje del valor numérico representado, no la cifra en sí. Tampoco se pueden mostrar los valores de las dimensiones categóricas siendo representadas (lo que se delega en la leyenda y en las etiquetas del eje horizontal). Para visualizar la cantidad representada en cada rectángulo es necesario mover el cursor por encima de la visualización (véase siguiente imagen).
No es posible modificar la posición de la leyenda, aunque sí el orden en el que se muestra cada elemento en ésta (ascendente o descendente). También en las barras verticales es posible mostrar las divisiones en el mismo orden en todas las barras o en función del valor representado en cada división (de mayor a menor o viceversa):
En resumen, aun cuando se echan de menos algunas opciones adicionales de configuración, resulta una interesante mejora del clásico tree map y de las gráficas de columnas 100% apiladas.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'bd900886-262b-4ca3-b862-5c87f52a9c3e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'bd900886-262b-4ca3-b862-5c87f52a9c3e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'bd900886-262b-4ca3-b862-5c87f52a9c3e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'bd900886-262b-4ca3-b862-5c87f52a9c3e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '31df7109-8fc4-4038-83c7-349de54cb47d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '31df7109-8fc4-4038-83c7-349de54cb47d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '31df7109-8fc4-4038-83c7-349de54cb47d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '31df7109-8fc4-4038-83c7-349de54cb47d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7604dbf2-693c-476c-b6ea-438b86ef063c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7604dbf2-693c-476c-b6ea-438b86ef063c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7604dbf2-693c-476c-b6ea-438b86ef063c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7604dbf2-693c-476c-b6ea-438b86ef063c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b8264e8-923b-4c7d-a164-93b8ff4111cf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b8264e8-923b-4c7d-a164-93b8ff4111cf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b8264e8-923b-4c7d-a164-93b8ff4111cf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b8264e8-923b-4c7d-a164-93b8ff4111cf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'eabf2e9b-f368-4f87-8c3d-13e808015741') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'eabf2e9b-f368-4f87-8c3d-13e808015741') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'eabf2e9b-f368-4f87-8c3d-13e808015741') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'eabf2e9b-f368-4f87-8c3d-13e808015741') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '1abffc7e-f334-40e8-a544-a1fe220005ec') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '1abffc7e-f334-40e8-a544-a1fe220005ec') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '1abffc7e-f334-40e8-a544-a1fe220005ec') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '1abffc7e-f334-40e8-a544-a1fe220005ec') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '15b5fa34-f658-4bf4-b606-f46f07c067be') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '15b5fa34-f658-4bf4-b606-f46f07c067be') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '15b5fa34-f658-4bf4-b606-f46f07c067be') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '15b5fa34-f658-4bf4-b606-f46f07c067be') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '570de981-ee2d-483d-a6a2-7d834df7db92') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '570de981-ee2d-483d-a6a2-7d834df7db92') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '570de981-ee2d-483d-a6a2-7d834df7db92') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '570de981-ee2d-483d-a6a2-7d834df7db92') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5e9c41a9-3be4-471e-80d0-b6c5382d4b61') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5e9c41a9-3be4-471e-80d0-b6c5382d4b61') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5e9c41a9-3be4-471e-80d0-b6c5382d4b61') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5e9c41a9-3be4-471e-80d0-b6c5382d4b61') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b79c956e-72dc-42df-a014-df3574f04fd3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b79c956e-72dc-42df-a014-df3574f04fd3') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b79c956e-72dc-42df-a014-df3574f04fd3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'b79c956e-72dc-42df-a014-df3574f04fd3') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b63bd78-86e5-415a-9464-0aee00ada63c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b63bd78-86e5-415a-9464-0aee00ada63c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b63bd78-86e5-415a-9464-0aee00ada63c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '5b63bd78-86e5-415a-9464-0aee00ada63c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>Chiclet Slicer</strong> es una versión muy versátil de la clásica segmentación con orientación horizontal. Su configuración aparentemente no es mucho más compleja: en el siguiente ejemplo se ha arrastrado una instancia de esta visualización al lienzo y se ha llevado el año de la tabla calendario hasta el campo <em>Categoría</em> de la visualización:
Ésta es la configuración de la visualización:
Ya de entrada es posible ver en la visualización una primera diferencia con la segmentación clásica: los elementos se disponen en tres columnas. El número de éstas es configurable en <em>Formato > General > Columnas</em> (de hecho es posible configurar el número de filas y/o de columnas). Pero no solo eso, los valores (los años en este ejemplo) se muestran verticalmente (debajo del 2015 está el 2016, en la segunda columna encontramos el 2017 y el 2018...), pero podemos configurar también este orden en <em>Formato > General > Orientación</em> para que se muestren horizontalmente:
Por defecto se permite la selección múltiple de los elementos, pero este comportamiento es fácilmente modificable en <em>Formato > General > Selección múltiple</em>. También es posible configurar la visualización de forma que necesariamente tenga que existir un elemento seleccionado en todo momento.
Un aspecto interesante es que el slicer soporta el marcado cruzado, lo que significa que cuando se realiza un filtrado en otra visualización, los elementos del slicer reaccionan de forma adecuada. Esta reacción puede configurarse de forma que los elementos no seleccionados se oculten, se muestren en la parte inferior o adapten su formato. Por defecto está activada esta última opción, pero el formato de los elementos desactivados es el mismo que el de los que están activados, de forma que no es apreciable el cambio. Sin embargo, para que el marcado cruzado funcione hay que añadir un campo (relacionado con las tablas implicadas) al campo <em>Valores</em> de la visualización.
Por ejemplo, en la siguiente imagen podemos ver un slicer con los nombres de varios fabricantes de coches (campo llamado <em>Name</em>) en el que no hemos llevado ningún campo a <em>Valores</em>, y tenemos también un listado de dichos fabricantes con sus ventas. También hemos seleccionado uno de los nombres en esta última visualización ("Audi"):
Vemos como, efectivamente, el slicer no parece mostrar un aspecto diferente al que podríamos esperar si no se hubiese seleccionado ningún fabricante. Pero si arrastramos el campo <em>Name</em> también al campo <em>Valores</em> de la visualización (campo que se agrega extrayendo la "primera fecha" por defecto), el slicer se muestra muy diferente:
Podemos configurar el aspecto de los elementos no seleccionados en <em>Formato > Chiclets > Color deshabilitado</em>. Así, si seleccionamos un color amarillo el slicer muestra el siguiente aspecto:
En realidad es posible modificar los colores de varios elementos en función del estado en el que se encuentren.
El poder seleccionar el número de columnas o de filas nos permite crear segmentaciones de muy diferente aspecto:
Otra opción sumamente interesante es la posibilidad de llevar a cada elemento una imagen. Por ejemplo, en la siguiente visualización se ha llevado un campo conteniendo las URLs de los logos de los fabricantes al campo <em>Imagen</em> de la visualización:
El tamaño con el que se muestran las imágenes en los elementos es configurable (<em>Formato > Imágenes > División de la imagen</em>).
Al igual que antes, si seleccionamos el nombre de uno de los fabricantes en otra visualización, el slicer se modifica para resaltar el o los elementos seleccionados:
Y, por supuesto, aunque no se ha comentado hasta ahora, es obvio que la selección de uno de los elementos va a filtrar adecuadamente el resto de visualizaciones del informe. Si, por ejemplo, creamos una medida para que sume el campo <em>Car sales</em> (que contiene las ventas de cada fabricante, supongamos que en millones de euros) y la arrastramos al lienzo con formato de etiqueta, el resultado es el siguiente:
Ahora, si seleccionamos uno de los fabricantes en nuestro slicer, la etiqueta se filtra de la forma que cabría esperar:
Puede apreciarse que el elemento o los elementos seleccionados se muestran con un aspecto destacado (también configurable).
En general, podemos decir que se trata de una visualización que mejora notablemente la funcionalidad de las visualizaciones semejantes integradas en Power BI.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\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)