- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c2ca7382-6221-49c5-8141-5517c167d83c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c2ca7382-6221-49c5-8141-5517c167d83c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c2ca7382-6221-49c5-8141-5517c167d83c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c2ca7382-6221-49c5-8141-5517c167d83c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2d7f98b3-ad2b-42b2-a5e3-4d71a7343ab5') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2d7f98b3-ad2b-42b2-a5e3-4d71a7343ab5') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2d7f98b3-ad2b-42b2-a5e3-4d71a7343ab5') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2d7f98b3-ad2b-42b2-a5e3-4d71a7343ab5') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7297ea4a-2b64-45f4-a1fc-facb2b79b4ce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7297ea4a-2b64-45f4-a1fc-facb2b79b4ce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7297ea4a-2b64-45f4-a1fc-facb2b79b4ce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7297ea4a-2b64-45f4-a1fc-facb2b79b4ce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4ea1a3bb-c227-445b-a539-0c5aff1bca78') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4ea1a3bb-c227-445b-a539-0c5aff1bca78') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4ea1a3bb-c227-445b-a539-0c5aff1bca78') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4ea1a3bb-c227-445b-a539-0c5aff1bca78') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1e42288e-2639-4ff0-909b-60d265a46c17') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1e42288e-2639-4ff0-909b-60d265a46c17') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1e42288e-2639-4ff0-909b-60d265a46c17') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1e42288e-2639-4ff0-909b-60d265a46c17') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4b721541-a559-42df-b6bd-21ecce234426') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4b721541-a559-42df-b6bd-21ecce234426') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4b721541-a559-42df-b6bd-21ecce234426') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4b721541-a559-42df-b6bd-21ecce234426') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5635f3d1-5254-4eb0-b7d8-dec86139b721') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5635f3d1-5254-4eb0-b7d8-dec86139b721') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5635f3d1-5254-4eb0-b7d8-dec86139b721') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5635f3d1-5254-4eb0-b7d8-dec86139b721') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2f81d0f6-cbfb-4622-ac1e-86fd07bb1fb2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2f81d0f6-cbfb-4622-ac1e-86fd07bb1fb2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2f81d0f6-cbfb-4622-ac1e-86fd07bb1fb2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2f81d0f6-cbfb-4622-ac1e-86fd07bb1fb2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ddde9cc5-f69c-421b-a873-8d5567f6e29e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ddde9cc5-f69c-421b-a873-8d5567f6e29e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ddde9cc5-f69c-421b-a873-8d5567f6e29e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ddde9cc5-f69c-421b-a873-8d5567f6e29e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-36c41557-376f-43b3-a718-a64610611d64') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-36c41557-376f-43b3-a718-a64610611d64') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-36c41557-376f-43b3-a718-a64610611d64') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-36c41557-376f-43b3-a718-a64610611d64') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>matriz</strong> o <strong>matrix</strong> nos permite representar un conjunto de datos (por ejemplo, “Ventas”) segmentado según dos criterios que serán representados en una tabla con encabezados de fila y de columna (por ejemplo, “País” y “Año”). Esta visualización es semejante a la que resultaría de crear una tabla dinámica en Excel.
El panel de campos de la matriz es el que cabría esperar en este caso, con campos para filas, columnas y valores:
<a href="/sites/default/files/2019-09/matrix_01.jpg"></a>
<ul><li>Campo "<em>Filas</em>": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Columnas": recibirá el criterio de segmentación que se mostrará para las filas. Admite más de uno.</li>
<li>Campo "Valores": recibirá el valor base a mostrar. Permite añadir más de uno.</li>
</ul>En el caso de que se incluya más de un campo en filas o columnas, la tabla mostrará los subtotales correspondientes para cada uno.
Tal y como se ha sugerido, llevemos la medida <em>Sales</em> a <em>Valores</em>, el campo <em>Country</em> al campo <em>Filas</em> de la visualización y el campo <em>Año</em> (del calendario) al campo <em>Columnas</em>:
<a href="/sites/default/files/2019-09/matrix_02.jpg"></a>
Si, por ejemplo, llevamos un segundo campo a <em>Filas</em> (el campo <em>Region</em>, conteniendo la región del país en la que se realiza cada venta):
<a href="/sites/default/files/2019-09/matrix_03.jpg"></a>
...la matriz muestra un pequeño signo + a la izquierda de cada encabezado de fila, signo que nos permite desglosar el país por regiones:
<a href="/sites/default/files/2019-09/matrix_04.jpg"></a>
En este caso, también podemos movernos por la jerarquía creada haciendo uso de los típicos iconos que se muestran (si hay espacio) en la parte superior derecha de la visualización.
Los signos + y - pueden activarse o desactivarse en <em>Formato > Encabezados de fila > +/- iconos</em>.
Tanto los encabezados (de filas y columnas) como los valores pueden ser personalizados con gran detalle. Por ejemplo, podemos desactivar el diseño escalonado de filas que se ve en la anterior imagen (<em>Formato > Encabezados de fila > Diseño escalonado</em>):
<a href="/sites/default/files/2019-09/matrix_05.jpg"></a>
Ahora, las primeras dos columnas (correspondientes al país y a la región) no se solapan, y la primera región de cada país ocupa la misma fila que el país al que pertenece.
Es posible aplicar estilos predeterminados a la matriz (<em>Formato > Estilo</em>). El estilo por defecto (al que corresponden las anteriores imágenes) es el llamado <em>Valor predeterminado</em>, pero hay otros:
<ul><li>Encabezado en negrita:</li>
</ul><a href="/sites/default/files/2019-09/matrix_06.jpg"></a>
<ul><li>Filas alternas:</li>
</ul><a href="/sites/default/files/2019-09/matrix_07.jpg"></a>
<ul><li>Comprimido:</li>
</ul><a href="/sites/default/files/2019-09/matrix_08.jpg"></a>
...y otros varios.
Por supuesto, a partir de un estilo es posible especificar con detalle los colores y formato a aplicar a encabezados, valores, subtotales y total general:
<a href="/sites/default/files/2019-09/matrix_09.jpg"></a>
Es posible aplicar a las celdas con los valores un formato condicional: color de fondo, color de fuente, barras de datos e iconos (véanse los comentarios hechos al respecto para la <a href="/powerbi/visual/table-tabla">visualización Tabla</a>):
<a href="/sites/default/files/2019-09/matrix_10.jpg"></a>
Se trata de una visualización muy personalizable y versátil, y muy útil cuando necesitamos comunicar un conjunto relativamente amplio de valores con mucha precisión.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-03f741ca-edc7-4d25-9f23-ef5d11465a60') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-03f741ca-edc7-4d25-9f23-ef5d11465a60') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-03f741ca-edc7-4d25-9f23-ef5d11465a60') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-03f741ca-edc7-4d25-9f23-ef5d11465a60') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-81fc9d93-fa7a-428b-b03b-be28a16949ad') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-81fc9d93-fa7a-428b-b03b-be28a16949ad') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-81fc9d93-fa7a-428b-b03b-be28a16949ad') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-81fc9d93-fa7a-428b-b03b-be28a16949ad') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d6a77e89-8ae0-4fae-a269-4195d463206e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d6a77e89-8ae0-4fae-a269-4195d463206e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d6a77e89-8ae0-4fae-a269-4195d463206e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d6a77e89-8ae0-4fae-a269-4195d463206e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ff6a9-9468-4fcc-80bd-5e2dfc67b301') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ff6a9-9468-4fcc-80bd-5e2dfc67b301') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ff6a9-9468-4fcc-80bd-5e2dfc67b301') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ff6a9-9468-4fcc-80bd-5e2dfc67b301') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-257accdd-a1a8-413a-9fea-c6fd645e3271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-257accdd-a1a8-413a-9fea-c6fd645e3271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-257accdd-a1a8-413a-9fea-c6fd645e3271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-257accdd-a1a8-413a-9fea-c6fd645e3271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b1aa361f-663a-4d5f-8ad9-a48d4529ae7c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b1aa361f-663a-4d5f-8ad9-a48d4529ae7c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b1aa361f-663a-4d5f-8ad9-a48d4529ae7c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b1aa361f-663a-4d5f-8ad9-a48d4529ae7c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ce77ae7b-2434-4dfc-b80a-0bf1075fd44f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ce77ae7b-2434-4dfc-b80a-0bf1075fd44f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ce77ae7b-2434-4dfc-b80a-0bf1075fd44f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ce77ae7b-2434-4dfc-b80a-0bf1075fd44f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d44acff8-b382-4159-943e-6ce92bc9a299') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d44acff8-b382-4159-943e-6ce92bc9a299') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d44acff8-b382-4159-943e-6ce92bc9a299') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d44acff8-b382-4159-943e-6ce92bc9a299') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7fa04c13-96a4-48de-b147-cf47a07c14ed') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7fa04c13-96a4-48de-b147-cf47a07c14ed') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7fa04c13-96a4-48de-b147-cf47a07c14ed') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7fa04c13-96a4-48de-b147-cf47a07c14ed') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1df41d9-c875-4af7-b307-5f6c14af3c80') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1df41d9-c875-4af7-b307-5f6c14af3c80') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1df41d9-c875-4af7-b307-5f6c14af3c80') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1df41d9-c875-4af7-b307-5f6c14af3c80') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a1d85f46-c8aa-4e37-a591-45cc067ae271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a1d85f46-c8aa-4e37-a591-45cc067ae271') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a1d85f46-c8aa-4e37-a591-45cc067ae271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a1d85f46-c8aa-4e37-a591-45cc067ae271') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b45c6a88-11de-4bfd-8a74-bad042736451') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b45c6a88-11de-4bfd-8a74-bad042736451') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b45c6a88-11de-4bfd-8a74-bad042736451') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b45c6a88-11de-4bfd-8a74-bad042736451') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3d693e43-1ffc-414f-aceb-57ee4b9ed509') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3d693e43-1ffc-414f-aceb-57ee4b9ed509') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3d693e43-1ffc-414f-aceb-57ee4b9ed509') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3d693e43-1ffc-414f-aceb-57ee4b9ed509') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-621364fc-3637-48f4-a326-6ee3495b5f1f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-621364fc-3637-48f4-a326-6ee3495b5f1f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-621364fc-3637-48f4-a326-6ee3495b5f1f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-621364fc-3637-48f4-a326-6ee3495b5f1f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-edcb92ab-92ec-4804-bd51-bc103329e5df') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-edcb92ab-92ec-4804-bd51-bc103329e5df') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-edcb92ab-92ec-4804-bd51-bc103329e5df') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-edcb92ab-92ec-4804-bd51-bc103329e5df') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1bfaaad-32a5-49aa-aa73-98b46138c1b9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1bfaaad-32a5-49aa-aa73-98b46138c1b9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1bfaaad-32a5-49aa-aa73-98b46138c1b9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d1bfaaad-32a5-49aa-aa73-98b46138c1b9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tablas</strong> (<strong>tables</strong> en inglés) nos permiten mostrar información de forma tabular. Su panel de campos es muy simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_01.jpg"></a>
...apenas un campo ("<em>Valores</em>") al que llevar aquellos campos o medidas de nuestro modelo de datos que queremos que formen las columnas de la tabla (lógicamente admite más de un campo o medida).
Por ejemplo, llevemos a <em>Valores</em> el campo <em>Country</em> (país en el que se realiza la venta) y las medidas <em>Sales</em> (suma de importes de venta) y <em>Units</em> (suma de unidades involucradas en cada venta):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_02.jpg"></a>
La tabla muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_03.jpg"></a>
Las columnas de las tablas son ajustables en anchura. Para ello podemos situar el cursor en el extremo derecho de la cabecera de una columna y pinchar y arrastrar. O situar el cursor en ese extremo derecho y hacer un doble clic para que el ancho se ajuste automáticamente de forma que se asegure que todos los valores de dicha columna son completamente visibles.
También es posible ordenar las columnas (de mayor a menor o viceversa, de A a la Z o viceversa, etc.) simplemente haciendo clic en la cabecera de las columnas. El orden vendrá indicado por un triángulo negro apuntando de arriba abajo o viceversa:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_04.jpg"></a>
También podemos hacer clic en los tres puntos que se muestran en la esquina superior derecha de la visualización para escoger el campo por el que queremos que se ordenen las filas de la tabla (y su orden, ascendente o descendente):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_05.jpg"></a>
Si se incluyen en esta visualización campos numéricos, se mostrará el total en la base de la columna (estos totales pueden deshabilitarse en el área de formato de la visualización: <em>Formato > Total > Totales</em>). La fila en la que se muestran estos totales -y los encabezados- permanecen siempre visibles aun cuando hagamos uso de la barra de desplazamiento vertical o redimensionemos la visualización.
Este total es el resultado de la medida (si lo que hemos llevado a <em>Valores</em> es un objeto de este tipo) o el resultado de aplicar una función de agregación que podemos escoger (si se trata de un campo).
Es posible aplicar a estas medidas y campos numéricos un formato condicional. Para ello hacemos clic en el triángulo invertido que se muestra a la derecha del nombre de dicho campo, seleccionamos <em>Formato condicional</em> y, a continuación, el tipo de formato deseado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_06.jpg"></a>
Estas opciones de formato personalizado nos permiten modificar el color de fondo, el color de la fuente, añadir barras de datos así como iconos en función del valor que adopte algún campo (no tiene por qué ser necesariamente el valor del campo sobre el que estamos aplicando el formato condicional). Por ejemplo, si seleccionamos la opción <em>Color de fondo</em>, se nos muestra la siguiente ventana:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_07.jpg"></a>
En la parte superior de esta ventana se nos permite escoger el criterio:
<ul><li><strong>Escala de colores</strong>: Podemos escoger los valores más bajo y más alto (para un cierto campo o medida), y los colores asociados (podemos también seleccionar la opción divergente para añadir un valor y un color intermedio). Esta opción es la mostrada en la imagen anterior.</li>
<li><strong>Reglas</strong>: Con esta opción podemos especificar reglas cuyo cumplimiento se reflejará en la tabla mostrándose el fondo de la celda con el color escogido:</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_08.jpg"></a>
<ul><li><strong>Valor de campo</strong>: En esta tercera opción, se espera que el campo o medida escogida devuelva un color (es decir, que el campo o medida contenga valores del tipo "red", "blue"... o colores definidos por un valor hexadecimal como "#ff553c" o semejante):</li>
</ul><a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_09.jpg"></a>
Si, por ejemplo, seleccionamos la primera opción (<em>Escala de colores</em>) y dejamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_10.jpg"></a>
Es posible eliminar el formato condicional haciendo clic nuevamente en el triangulito invertido que se muestra a la derecha del nombre del campo y seleccionando <em>Quitar el formato condicional</em>. Como puede apreciarse en la siguiente imagen podemos eliminar todos los formatos condicionales que existan o un tipo concreto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_11.jpg"></a>
El formato condicional que permite modificar el color de la fuente muestra opciones semejantes a las vistas.
La opción de aplicar <em>barras de datos</em>, por el contrario, nos permite únicamente definir el valor más bajo y más alto a considerar, así como escoger los colores de las barras y la dirección de éstas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_12.jpg"></a>
Si, en este ejemplo, aceptamos las opciones por defecto, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_13.jpg"></a>
Por último, la opción de mostrar <em>iconos</em> nos permite mostrar un icono en cada celda según dos posibles criterios: aplicando <em>reglas</em> o según <em>valores de campo</em> (ambas opciones ya han sido comentadas):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_14.jpg"></a>
Además de varias otras opciones, podemos escoger el estilo de los iconos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_15.jpg"></a>
Por ejemplo, si escogemos la medida <em>Sales</em> en la opción "<em>Según el campo</em>" que se muestra en la parte superior de la ventana, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/table_16.jpg"></a>
La visualización ofrece gran cantidad de opciones de personalización: para la cuadrícula (<em>Formato > Cuadrícula</em>) -activación o desactivación de las líneas verticales y horizontales que definen las celdas, colores por defecto de filas y columnas...-, encabezados de columna (color, familia de fuente, tamaño...), colores por defecto de la fuente y fondos a usar, formato de los totales, formato de cada uno de los campos que se hayan llevado a la tabla (color de fuente, del fondo, alineación, tipo de unidades a usar y número de decimales -solo para campos numéricos-...
Se trata de una visualización muy completa y personalizable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9874a217-43c5-4763-b440-89b4e7edbdca') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9874a217-43c5-4763-b440-89b4e7edbdca') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9874a217-43c5-4763-b440-89b4e7edbdca') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9874a217-43c5-4763-b440-89b4e7edbdca') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bcd73194-6cd2-45a9-8c38-a350b630e3c7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bcd73194-6cd2-45a9-8c38-a350b630e3c7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bcd73194-6cd2-45a9-8c38-a350b630e3c7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bcd73194-6cd2-45a9-8c38-a350b630e3c7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ab04bf9e-344c-43d1-bbbe-b1953b897e68') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ab04bf9e-344c-43d1-bbbe-b1953b897e68') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ab04bf9e-344c-43d1-bbbe-b1953b897e68') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ab04bf9e-344c-43d1-bbbe-b1953b897e68') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c09e77ca-4704-43a9-a164-23940204c628') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c09e77ca-4704-43a9-a164-23940204c628') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c09e77ca-4704-43a9-a164-23940204c628') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-c09e77ca-4704-43a9-a164-23940204c628') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fff5203a-6bc9-4c69-8287-11763977fcec') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fff5203a-6bc9-4c69-8287-11763977fcec') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fff5203a-6bc9-4c69-8287-11763977fcec') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fff5203a-6bc9-4c69-8287-11763977fcec') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-89fa48cc-ed58-4da6-8261-9196f2c038a9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-89fa48cc-ed58-4da6-8261-9196f2c038a9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-89fa48cc-ed58-4da6-8261-9196f2c038a9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-89fa48cc-ed58-4da6-8261-9196f2c038a9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3ed14f9-1507-4558-be80-7e904e9bbc07') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3ed14f9-1507-4558-be80-7e904e9bbc07') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3ed14f9-1507-4558-be80-7e904e9bbc07') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3ed14f9-1507-4558-be80-7e904e9bbc07') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ef19c871-5a72-4585-b392-d2ea3860921c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ef19c871-5a72-4585-b392-d2ea3860921c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ef19c871-5a72-4585-b392-d2ea3860921c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ef19c871-5a72-4585-b392-d2ea3860921c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e4e785ae-027c-4da8-bc37-3590a902b218') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e4e785ae-027c-4da8-bc37-3590a902b218') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e4e785ae-027c-4da8-bc37-3590a902b218') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e4e785ae-027c-4da8-bc37-3590a902b218') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-267b5ff1-45ce-4fea-bb72-8f87c3bab6f2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-267b5ff1-45ce-4fea-bb72-8f87c3bab6f2') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-267b5ff1-45ce-4fea-bb72-8f87c3bab6f2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-267b5ff1-45ce-4fea-bb72-8f87c3bab6f2') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5fa586c2-0ac7-47ed-be39-ba7617e3990a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5fa586c2-0ac7-47ed-be39-ba7617e3990a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5fa586c2-0ac7-47ed-be39-ba7617e3990a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5fa586c2-0ac7-47ed-be39-ba7617e3990a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cd1f6586-6b0c-4715-a35b-79a52be88871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cd1f6586-6b0c-4715-a35b-79a52be88871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cd1f6586-6b0c-4715-a35b-79a52be88871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cd1f6586-6b0c-4715-a35b-79a52be88871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0823cd3c-18b3-4d12-b8ff-2d38c27c9f6c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0823cd3c-18b3-4d12-b8ff-2d38c27c9f6c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0823cd3c-18b3-4d12-b8ff-2d38c27c9f6c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0823cd3c-18b3-4d12-b8ff-2d38c27c9f6c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2c9686b7-ebaa-440b-a0d4-02962a4ef986') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2c9686b7-ebaa-440b-a0d4-02962a4ef986') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2c9686b7-ebaa-440b-a0d4-02962a4ef986') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2c9686b7-ebaa-440b-a0d4-02962a4ef986') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7b27c809-e40b-4c85-8e5f-f46c64501392') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7b27c809-e40b-4c85-8e5f-f46c64501392') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7b27c809-e40b-4c85-8e5f-f46c64501392') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7b27c809-e40b-4c85-8e5f-f46c64501392') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b0322380-525a-4fcc-b619-b943c06aac89') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b0322380-525a-4fcc-b619-b943c06aac89') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b0322380-525a-4fcc-b619-b943c06aac89') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b0322380-525a-4fcc-b619-b943c06aac89') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8df18089-cace-440d-b94f-7e9af181936e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8df18089-cace-440d-b94f-7e9af181936e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8df18089-cace-440d-b94f-7e9af181936e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8df18089-cace-440d-b94f-7e9af181936e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ea90261b-6fa8-4014-a6ff-d8a197c32b38') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ea90261b-6fa8-4014-a6ff-d8a197c32b38') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ea90261b-6fa8-4014-a6ff-d8a197c32b38') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ea90261b-6fa8-4014-a6ff-d8a197c32b38') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ec00b272-7573-44ab-ae14-4415dd0f9194') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ec00b272-7573-44ab-ae14-4415dd0f9194') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ec00b272-7573-44ab-ae14-4415dd0f9194') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ec00b272-7573-44ab-ae14-4415dd0f9194') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dbb3bb35-e14a-4815-80e8-ac448247c69e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dbb3bb35-e14a-4815-80e8-ac448247c69e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dbb3bb35-e14a-4815-80e8-ac448247c69e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dbb3bb35-e14a-4815-80e8-ac448247c69e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a9dbe2a0-4b7e-4d23-a251-fb84b7a6aa91') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a9dbe2a0-4b7e-4d23-a251-fb84b7a6aa91') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a9dbe2a0-4b7e-4d23-a251-fb84b7a6aa91') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a9dbe2a0-4b7e-4d23-a251-fb84b7a6aa91') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e0f02db1-eb13-4793-a9db-95aafbc3536a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e0f02db1-eb13-4793-a9db-95aafbc3536a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e0f02db1-eb13-4793-a9db-95aafbc3536a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e0f02db1-eb13-4793-a9db-95aafbc3536a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6a9534fb-cbc1-41e9-8fbf-1d0859925b93') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6a9534fb-cbc1-41e9-8fbf-1d0859925b93') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6a9534fb-cbc1-41e9-8fbf-1d0859925b93') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6a9534fb-cbc1-41e9-8fbf-1d0859925b93') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Las <strong>segmentaciones</strong> o <strong>slicers</strong> son una de las visualizaciones que más prácticas resultan pues permiten al usuario de nuestro informe (seamos nosotros o no) segmentar los datos del informe según el criterio controlado por la segmentación. Su panel de campos es sumamente simple:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_01.jpg"></a>
El único campo disponible (cuyo nombre es <em>Campo</em>), recibirá el campo (no se aceptan medidas) por cuyos valores se desea segmentar la información mostrada en el informe.
Por ejemplo, creemos una visualización de este tipo y llevemos el campo Country de nuestro modelo de datos al campo mencionado en esta visualización. Por defecto nos muestra un listado de los distintos valores que toma dicho campo, junto a casillas de selección que nos permiten seleccionar la opción que nos interesa (para visualizar mejor el efecto de la segmentación se incluye un mapa a su derecha mostrando las ventas por país):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_02.jpg"></a>
Vemos que se incluye una opción "(En blanco)" aun cuando no hay ventas que no tengan un país asociado.
Con un clic en alguna de las casillas de selección seleccionamos la opción que corresponda (y solo esa). Es decir, por defecto solo se admite una casilla seleccionada:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_03.jpg"></a>
Podemos presionar la tecla <em>Control</em> mientras seleccionamos una opción para añadirla a la que ya exista. Otra forma de permitir selecciones múltiples es activar la opción Formato > Controles de selección > Selección única:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_04.jpg"></a>
En este caso, al haber seleccionado explícitamente los países que nos interesan, si en una actualización de los datos se añadiese un nuevo país, por defecto éste no se incluiría en la selección.
También podemos activar la opción de <em>Mostrar opción "Seleccionar todo"</em> en <em>Formato > Controles de selección,</em> en cuyo caso se mostrará también esta opción en el listado anterior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_05.jpg"></a>
Si hacemos clic en esta opción se seleccionan todas las demás, y la opción de "<em>Seleccionar todo</em>" queda marcada con un punto indicando que, a partir de ese momento, estamos aplicando un filtro negativo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_06.jpg"></a>
Ahora, un clic en alguna de las restantes opciones la elimina del conjunto de valores seleccionados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_07.jpg"></a>
Esto supone, por ejemplo, que si en una actualización de datos se añadiese un nuevo país, éste sí se seleccionaría por defecto (la segmentación anterior puede interpretarse como "selecciona todos los países menos Italia").
Un clic en el icono <em>Borrar selecciones</em> que se muestra en la parte superior de la visualización deselecciona todo (lo que supone que no se aplique ningún filtro a los países):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_08.jpg"></a>
A la derecha del icono anterior se muestra otro con aspecto de triángulo invertido, que nos permite modificar el tipo de interfaz mostrada por la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_09.jpg"></a>
Por defecto, la visualización muestra una interfaz tipo <em>Lista</em>. Si la cambiamos a <em>Menú desplegable</em> mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_10.jpg"></a>
Un clic en el texto <em>Todas</em> o en el triángulo invertido mostrado abrirá un menú con el listado de opciones.
Si hacemos clic en los tres puntos que se muestran en el extremo superior de la visualización se muestran opciones adicionales:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_11.jpg"></a>
Así, si seleccionamos la opción Buscar veremos cómo se muestra en la parte superior del listado de países un campo de búsqueda, vacío por defecto. A medida que escribamos cualquier texto en este campo, las opciones incluidas en el listado se irán filtrando para mostrar solo aquellas que incluyan el texto introducido, lo que resulta muy útil en el caso de que tengamos un listado de valores especialmente largo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_12.jpg"></a>
Un nuevo clic en los tres puntos y otro en <em>Buscar</em> oculta el campo de búsqueda.
Una opción muy útil es la de seleccionar la "orientación" de nuestra visualización, opción que podemos encontrar en <em>Formato > General > Orientación</em>. La opción por defecto es <em>Vertical</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_13.jpg"></a>
Hay que comentar que el nombre de esta opción no está nada bien escogido: "<em>Vertical</em>" quiere decir en realidad que el listado se va a mostrar en vertical y no se va a adaptar al tamaño de la visualización. La opción "<em>Horizontal</em>", por el contrario, significa que el listado se mostrará como un panel de botones en vertical o en horizontal en función del tamaño de la visualización. Por ejemplo, seleccionemos esta opción ("<em>Horizontal</em>") y estiremos la visualización hacia abajo (para hacerla muy alta y con el mismo ancho que tenía). Las opciones se muestran como botones en vertical, y un clic en uno de los botones lo selecciona, tal y como ocurría antes:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_14.jpg"></a>
Estaremos de acuerdo en que este formato no tiene mucho de "horizontal"...
Ahora, si ahora redimensionamos la visualización para que sea muy ancho y poco alta, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_15.jpg"></a>
Es posible personalizar los colores de los botones y del texto que se muestra en ellos en <em>Formato > Elementos</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_17.jpg"></a>
En la imagen anterior también se ha eliminado el texto ("<em>Country</em>") que se muestra por defecto en la esquina superior izquierda de la visualización (<em>Formato > Encabezado de segmentación</em>).
Con independencia del nombre de esta opción, resulta extremadamente útil y atractiva para crear menús que permitan al usuario del informe la fácil segmentación de los datos.
En el caso de que el campo a utilizar en la segmentación sea un campo de tipo fecha, las opciones aumentan. Por defecto se muestra en el lienzo una segmentación de tipo <em>slider</em>, que nos permite pinchar y arrastrar cualquiera de los dos extremos con el objetivo de especificar la primera y última fecha a incluir en el informe:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_18.jpg"></a>
Al hacer clic en alguno de los dos recuadros que indican la fecha seleccionada, se abre un calendario que nos permite buscar cómodamente la fecha de interés:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_19.jpg"></a>
Un clic en la etiqueta del mes o del año nos abre un listado vertical que nos permite desplazarnos rápidamente por el calendario:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_20.jpg"></a>
También es posible escribir directamente la fecha de interés en los recuadros comentados.
Se ha comentado que, por defecto, la visualización muestra una segmentación tipo <em>slider</em>. Pues bien, un clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha de la visualización nos muestra el resto de opciones disponibles:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_21.jpg"></a>
El nombre de la opción por defecto es <em>Entre</em>, pero podemos escoger la opción <em>Anterior a</em>, que nos permitirá escoger únicamente una fecha, seleccionando todas las anteriores, <em>Posterior a</em>, semejante a la anterior, <em>Lista</em>, mostrando un listado de fechas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_22.jpg"></a>
...<em>Menú desplegable</em>, semejante a la opción anterior pero en la que el listado de fechas se muestra como un menú que se abre al hacer clic en la visualización, y <em>Relativa</em>, opción muy útil que nos permite seleccionar fechas relativas a "algo". Ese "algo" puede ser el último período de tiempo, el siguiente o el actual, y una vez determinado este período de referencia, podemos escoger los N períodos que nos interesen, ya sean días, meses, años...:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_23.jpg"></a>
Si el campo que llevamos a la segmentación es de tipo numérico, se nos muestra una interfaz semejante a la de las fechas. En la siguiente imagen, por ejemplo, se ha llevado al campo <em>Campos</em> de la visualización el campo <em>Amount</em> que define el montante de cada venta:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/slicer_24.jpg"></a>
Al igual que con las fechas, podemos pinchar y arrastrar los extremos para limitar los valores incluidos en la selección, escribir directamente la cifra en el recuadro, hacer clic en el icono con forma de triángulo invertido que se muestra en la esquina superior derecha para visualizar otras opciones disponibles (<em>Entre</em>, <em>Menor o igual que</em>, etc.).
En función del campo que se esté utilizando para la segmentación (si es numérico o categórico) la visualización nos ofrece ciertas opciones adicionales para personalizar la visualización (colores, etc.).
En resumen, se trata de una visualización extremadamente útil y muy versátil.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5b8ca6ac-d74d-4b13-8154-cb45e47c31ad') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5b8ca6ac-d74d-4b13-8154-cb45e47c31ad') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5b8ca6ac-d74d-4b13-8154-cb45e47c31ad') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-5b8ca6ac-d74d-4b13-8154-cb45e47c31ad') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1b15988d-8b6e-469f-badf-b7935b16550d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1b15988d-8b6e-469f-badf-b7935b16550d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1b15988d-8b6e-469f-badf-b7935b16550d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1b15988d-8b6e-469f-badf-b7935b16550d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-833f2762-8cf8-4c06-a994-2a7289230eb8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-833f2762-8cf8-4c06-a994-2a7289230eb8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-833f2762-8cf8-4c06-a994-2a7289230eb8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-833f2762-8cf8-4c06-a994-2a7289230eb8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4383749d-05ec-4f1e-80e2-0f08262e4e2f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4383749d-05ec-4f1e-80e2-0f08262e4e2f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4383749d-05ec-4f1e-80e2-0f08262e4e2f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4383749d-05ec-4f1e-80e2-0f08262e4e2f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-409ffccc-5b28-4bad-a212-3f1ec091057c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-409ffccc-5b28-4bad-a212-3f1ec091057c') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-409ffccc-5b28-4bad-a212-3f1ec091057c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-409ffccc-5b28-4bad-a212-3f1ec091057c') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0aae3884-2e7c-44a3-a6d8-ed33f734263a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0aae3884-2e7c-44a3-a6d8-ed33f734263a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0aae3884-2e7c-44a3-a6d8-ed33f734263a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0aae3884-2e7c-44a3-a6d8-ed33f734263a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-eb9fe5c2-4266-422c-a208-b7265150d730') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-eb9fe5c2-4266-422c-a208-b7265150d730') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-eb9fe5c2-4266-422c-a208-b7265150d730') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-eb9fe5c2-4266-422c-a208-b7265150d730') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9b66d42c-34ff-4eda-997a-1dcb59e00f18') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9b66d42c-34ff-4eda-997a-1dcb59e00f18') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9b66d42c-34ff-4eda-997a-1dcb59e00f18') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9b66d42c-34ff-4eda-997a-1dcb59e00f18') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-333aaa03-824d-4ece-85d0-c7f40c2e4e4f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-333aaa03-824d-4ece-85d0-c7f40c2e4e4f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-333aaa03-824d-4ece-85d0-c7f40c2e4e4f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-333aaa03-824d-4ece-85d0-c7f40c2e4e4f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-64447f03-8bed-4202-bc70-bf86ca81bcd9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-64447f03-8bed-4202-bc70-bf86ca81bcd9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-64447f03-8bed-4202-bc70-bf86ca81bcd9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-64447f03-8bed-4202-bc70-bf86ca81bcd9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El <strong>KPI</strong> o <strong>indicador</strong> es perfecto cuando queremos mostrar y destacar una cifra, pero referenciándola a los valores históricos de la misma. El panel de campos de esta visualización es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_01.jpg"></a>
En este tipo de visualizaciones trabajamos con una medida o campo del que extraer un valor numérico (tras aplicarle una operación de agregación), el criterio para establecer la referencia (que, como se ha comentado, típicamente será un criterio temporal como "Año", "Mes"...) y, potencialmente, un valor objetivo con el que comparar el valor mostrado.
<ul><li>Campo "<em>Indicador</em>": recibirá el campo del que extraer el valor numérico a mostrar. Solo admite uno.</li>
<li>Campo "<em>Eje de tendencia</em>": recibirá el campo que representará el criterio histórico con el que comparar el valor. Solo admite uno.</li>
<li>Campo "<em>Objetivos de destino</em>": recibirá el campo del que extraer el valor objetivo. Admite un máximo de dos campos.</li>
</ul>Llevemos, por ejemplo, nuestra medida <em>Sales</em> (medida que contiene la suma de los importes de venta) al campo <em>Indicador</em> de la visualización, y el campo <em>Año</em> de nuestro calendario al campo <em>Eje de tendencia</em>. La visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_02.jpg"></a>
En el centro se muestra el valor resultante de calcular la medida <em>Sales</em> en el contexto actual y, de fondo, la misma medida segmentada por años, mostrada con aspecto de gráfico de áreas. Es posible modificar el formato de este número en <em>Formato > Indicador</em> (podemos escoger las unidades, el número de decimales y el tamaño de la fuente).
Obsérvese que este gráfico de áreas no tiene como base el valor cero para el eje vertical. Si llevamos a una tabla las ventas por año:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_03.jpg"></a>
...comprobamos que el valor para el 2017 (1.3 millones) es el mínimo de la serie, y que la gráfica de áreas representa dicho valor en la base del eje vertical.
Si, en lugar del campo <em>Año</em>, llevamos al campo <em>Eje de tendencia</em> el campo <em>Date</em>, campo que contiene la fecha de cada venta, la visualización muestra las ventas por día (difícilmente interpretable):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_04.jpg"></a>
En estas circunstancias, el campo <em>Date</em> en cuestión no es interpretado como jerarquía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_05.jpg"></a>
Pero si lo cambiamos a tipo "Jerarquía de fechas", la visualización muestra las ventas por año y no permite modificar su granularidad. Esto supone que si deseamos mostrar, por ejemplo, las ventas por mes (para un año específico), deberemos llevar el campo <em>Mes</em> a <em>Eje de tendencia</em> y filtrar adecuadamente el año (ya sea en la propia visualización, en el informe, etc.).
Si ahora llevamos un campo de nuestro modelo de datos (y seleccionamos una función de agregación) o una medida al campo <em>Objetivos de destino</em> de la visualización, el color del área mostrada detrás de nuestra cifra de venta se modificará, mostrándose en verde si nuestra cifra ha superado o iguala el objetivo, o en rojo si no lo ha hecho. Por ejemplo, en nuestro caso la cifra de ventas es de poco más de 2 millones de euros. Si llevamos a <em>Objetivos de destino</em> una sencilla medida que simplemente devuelva el valor 1.800.000, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_06.jpg"></a>
Por el contrario, si esta última medida devuelve una cifra mayor que nuestras ventas actuales, por ejemplo, 3.000.000, el área se muestra en rojo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_07.jpg"></a>
Vemos que no solo se modifica el color del área, sino también el color de la fuente en la que se muestra nuestro valor actual.
Estos colores son personalizables en <em>Formato > Codificación del color</em>, pudiendo además especificar si una cifra más alta que el objetivo es mejor o peor:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_08.jpg"></a>
Vemos en las imágenes anteriores que la cifra objetivo se muestra debajo de nuestra cifra actual, incluyendo la diferencia porcentual entre ambos valores. El formato de la cifra objetivo no puede personalizarse a través de la visualización. No podemos, por ejemplo, modificar su tamaño. Sí podemos añadir, por ejemplo separador de miles, aunque deberemos hacerlo usando la herramienta de formato de Power BI (<em>Cinta de opciones > Modelado > Formato</em>).
El campo <em>Objetivo de destino</em> de la visualización admite más de un campo o medidas de nuestro modelo de datos, modificándose ligeramente el comportamiento de la visualización. Para verlo, definamos otra medida que devuelva el valor mínimo de ventas objetivo:
Minimum Sales = 1500000
...y llevémosla por debajo de la medida <em>Sales objective</em> que ya teníamos en <em>Objetivo de destino</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_09.jpg"></a>
Ahora le estamos dando a la visualización dos objetivos, y el color a mostrar dependerá de si se cumplen ambos, ninguno o uno solo. En nuestro ejemplo, con ventas de poco más de 2 millones de euros, no superamos la cifra devuelva por la medida <em>Sales objective</em> (3 millones), pero sí superamos la devuelta por <em>Minimum Sales</em> (un millón y medio), por lo que la visualización se muestra en color amarillo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/kpi_10.jpg"></a>
Comprobamos que se muestran ambas cifras objetivo debajo de nuestra cifra actual pero se oculta el porcentaje que supone nuestra cifra actual con respecto a ellas.
Si se superasen ambas cifras la visualización se mostraría en verde, y si no se superase ninguna, se mostraría en rojo, como ya hemos visto.
Esta visualización no muestra la clásica ventana emergente con la información asociada cuando movemos el cursor por encima de ella.
La visualización permite alguna personalización adicional: inhabilitar el eje de tendencia (con lo que no se mostraría el gráfico de áreas), así como ocultar las cifras objetivo o el porcentaje que supone la cifra actual con respecto al objetivo.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6df4baad-3eb1-4acf-8f4b-93e98ab28b79') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6df4baad-3eb1-4acf-8f4b-93e98ab28b79') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6df4baad-3eb1-4acf-8f4b-93e98ab28b79') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6df4baad-3eb1-4acf-8f4b-93e98ab28b79') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-33c259c1-03af-4f81-985b-76f497b7ad13') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-33c259c1-03af-4f81-985b-76f497b7ad13') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-33c259c1-03af-4f81-985b-76f497b7ad13') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-33c259c1-03af-4f81-985b-76f497b7ad13') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af0cdc4b-40eb-4cf6-be19-230ab780e7e8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af0cdc4b-40eb-4cf6-be19-230ab780e7e8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af0cdc4b-40eb-4cf6-be19-230ab780e7e8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-af0cdc4b-40eb-4cf6-be19-230ab780e7e8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3331b801-abac-4728-a6b1-d2b9655d1467') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3331b801-abac-4728-a6b1-d2b9655d1467') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3331b801-abac-4728-a6b1-d2b9655d1467') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3331b801-abac-4728-a6b1-d2b9655d1467') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La <strong>tarjeta de varias filas</strong> o <strong>Multi-row card</strong> es de utilidad cuando queremos mostrar un conjunto de cifras independientes de cualquier otra referencia. Su panel de campos es tan sencillo como el de la visualización tipo <a href="/powerbi/visual/card-tarjeta">tarjeta</a>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_01.jpg"></a>
La visualización solo tiene un campo que aceptará los campos o medidas de nuestro modelo de datos (pueden ser varios) de los que extraer un valor numérico:
<ul><li>Campo “<em>Campos</em>”: recibe los campos y medidas cuyos valores numéricos queremos representar.</li>
</ul>Por ejemplo, si llevamos a la visualización las medidas <em>Sales</em> y <em>Margin</em>, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_02.jpg"></a>
En el caso de tratarse de medidas, se calcularán y se mostrará el valor resultante. Si se trata de campos numéricos, se les aplicará una función de agregación que podemos escoger. En la siguiente imagen, por ejemplo, se ha llevado el campo <em>Units</em> de la tabla <em>Sales</em> que contiene el número de unidades implicadas en cada operación de venta. Puede verse que disponemos de varias funciones de agregación entre las que escoger:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_03.jpg"></a>
En esta visualización, el formato de los valores numéricos es automático y no puede personalizarse, lo que limita un poco su utilidad.
Podemos añadir texto al valor a mostrar creando una medida calculada como el resultado de la concatenación del texto que nos interese y de la fórmula cuyo resultado queramos mostrar. Esta medida deberá ser cargada en el campo “<em>Campos</em>” de la visualización como cualquier otra. Véase el ejemplo incluido en la visualización <a href="/powerbi/visual/card-tarjeta">Tarjeta</a>.
Como se aprecia en la primera imagen mostrada, la visualización incluye una barra vertical a la izquierda de las cifras y etiquetas. Esta barra puede ocultarse o personalizarse (color y grosor). También podemos añadir un marco (pudiendo especificar los laterales en los que se muestra, su color y grosor). En la siguiente imagen se ha modificado la barra para mostrar un grosor de 4 (¿píxels?), color azul oscuro y un marco (llamado "esquema" en el panel de formato) en los cuatro laterales de la visualización:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/multirowcard_04.jpg"></a>
Esta personalización se realiza en <em>Formato > Tarjeta</em>.
El "esquema" es independiente del borde que puede mostrarse alrededor de cualquier visualización en Power BI (la única ventaja del esquema es que podemos aplicarlo a los lados que deseemos, mientras que el borde se aplica a los cuatro laterales).
Adicionalmente podemos dar formato a las etiquetas de los datos (color, tamaño de fuente y familia) -ya se ha comentado que no se puede especificar el formato numérico-, y a las etiquetas de texto que se muestran debajo de los valores (nuevamente, color, tamaño de fuente y familia).
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\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)