- 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', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e23d7bf9-8c5f-4126-bd5f-3251207719c4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e23d7bf9-8c5f-4126-bd5f-3251207719c4') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e23d7bf9-8c5f-4126-bd5f-3251207719c4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'e23d7bf9-8c5f-4126-bd5f-3251207719c4') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd008e6bd-5d78-419d-94fa-aa254c966d88') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd008e6bd-5d78-419d-94fa-aa254c966d88') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd008e6bd-5d78-419d-94fa-aa254c966d88') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd008e6bd-5d78-419d-94fa-aa254c966d88') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '776d2a25-cc68-40df-8017-68258a2b148a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '776d2a25-cc68-40df-8017-68258a2b148a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '776d2a25-cc68-40df-8017-68258a2b148a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '776d2a25-cc68-40df-8017-68258a2b148a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9a84cbb0-fad9-4764-8387-1f974a54d331') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9a84cbb0-fad9-4764-8387-1f974a54d331') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9a84cbb0-fad9-4764-8387-1f974a54d331') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9a84cbb0-fad9-4764-8387-1f974a54d331') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>TreeViz</strong>, permite la creación de árboles jerárquicos que muestren información sobre una o más métricas. Para ello, la visualización ofrece dos únicos campos: <em>Category Data</em>, al que llevar los campos que compondrán la jerarquía a representar, y <em>Measure Data</em>, al que llevar una o varias métricas (la primera será la mostrada en los nodos, las demás serán visibles solo en la ventana flotante que se muestra al mover el cursor encima de ellos). Por ejemplo, si queremos visualizar las ventas por país y sexo del comprador, bastaría con configurar la visualización de la siguiente forma:
El resultado es el siguiente:
Un clic en alguno de los símbolos que se muestran en la parte inferior de los nodos (la doble flecha apuntando hacia abajo) despliega el nodo en cuestión para mostrar el siguiente nivel de la jerarquía:
El símbolo equivalente apuntando hacia arriba sirve para colapsar dicha rama del árbol, y los mismos símbolos apuntando a la izquierda o a la derecha esconden o muestran los nodos que representan los menores valores del nivel.
Como se muestra en la siguiente captura de pantalla, al mover el cursor encima de un nodo se muestran los valores asociados a las métricas indicadas para el nodo en cuestión:
Una barra verde en el interior de cada nodo indica la proporción de la métrica principal (con respecto al máximo de dicha métrica en el nivel en el que se encuentre). Si nos encontramos en el segundo nivel de la jerarquía (o inferior), se muestran tantas barras verdes como sea necesario para mostrar el porcentaje que la métrica representa con respecto al máximo de cada nivel (actual o anterior). Estos porcentajes se muestran también al mover el cursor encima del nodo, tal y como puede apreciarse en la imagen anterior, en la que puede verse cómo el porcentaje de 25.2% ha sustituido a la cifra de ventas de Italia (1.248.372€).
La visualización solo ofrece dos características personalizables: si se muestran o no los valores en los nodos, y el número de nodos a esconder o mostrar usando los referidos iconos que apuntan a la derecha e izquierda.
Aun cuando la visualización resulta de gran utilidad en ciertos entornos, su mayor limitación tiene que ver son su aspecto: los colores no se adaptan al tema que se esté usando, no se pueden personalizar de ninguna forma (y las elecciones hechas pueden calificarse de bastante poco atractivas), y no ofrece un diseño coherente con el entorno ofrecido por Power BI. Como ejemplo, véase en la imagen anterior la ventana flotante que se muestra al mover el cursor por encima de un nodo con fondo azul y texto en blanco: ni es personalizable ni guarda coherencia alguna con el esquema gráfico de las demás ventanas de este estilo que estaremos usando en nuestros informes.
También se agradecerían herramientas adicionales, como poder configurar el árbol de forma que al expandir una rama se colapsasen (o no) las demás ramas del mismo nivel, por ejemplo. De otra forma, en ocasiones el árbol es tan grande que resulta complicado moverse por él.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\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)